Bez popisu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

Example30_PieChart.cs 7.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System.Collections;
  2. using UnityEngine;
  3. using UnityEngine.EventSystems;
  4. using XCharts.Runtime;
  5. namespace XCharts.Example
  6. {
  7. [DisallowMultipleComponent]
  8. public class Example30_PieChart : MonoBehaviour
  9. {
  10. private PieChart chart;
  11. private Serie serie, serie1;
  12. private float m_RadiusSpeed = 100f;
  13. private float m_CenterSpeed = 1f;
  14. private void OnEnable()
  15. {
  16. StartCoroutine(PieDemo());
  17. }
  18. IEnumerator PieDemo()
  19. {
  20. while (true)
  21. {
  22. StartCoroutine(PieAdd());
  23. yield return new WaitForSeconds(2);
  24. StartCoroutine(PieShowLabel());
  25. yield return new WaitForSeconds(4);
  26. StartCoroutine(Doughnut());
  27. yield return new WaitForSeconds(3);
  28. StartCoroutine(DoublePie());
  29. yield return new WaitForSeconds(2);
  30. StartCoroutine(RosePie());
  31. yield return new WaitForSeconds(5);
  32. }
  33. }
  34. IEnumerator PieAdd()
  35. {
  36. chart = gameObject.GetComponent<PieChart>();
  37. if (chart == null) chart = gameObject.AddComponent<PieChart>();
  38. yield return null;
  39. chart.GetChartComponent<Title>().text = "PieChart - 饼图";
  40. chart.GetChartComponent<Title>().subText = "基础饼图";
  41. var legend = chart.EnsureChartComponent<Legend>();
  42. legend.show = true;
  43. legend.location.align = Location.Align.TopLeft;
  44. legend.location.top = 60;
  45. legend.location.left = 2;
  46. legend.itemWidth = 70;
  47. legend.itemHeight = 20;
  48. legend.orient = Orient.Vertical;
  49. chart.RemoveData();
  50. serie = chart.AddSerie<Bar>("访问来源");
  51. serie.radius[0] = 0;
  52. serie.radius[1] = 110;
  53. serie.center[0] = 0.5f;
  54. serie.center[1] = 0.4f;
  55. chart.AddData(0, 335, "直接访问");
  56. chart.AddData(0, 310, "邮件营销");
  57. chart.AddData(0, 243, "联盟广告");
  58. chart.AddData(0, 135, "视频广告");
  59. chart.AddData(0, 1548, "搜索引擎");
  60. chart.onPointerClickPie = delegate (PointerEventData e, int serieIndex, int dataIndex)
  61. {
  62. };
  63. yield return new WaitForSeconds(1);
  64. }
  65. IEnumerator PieShowLabel()
  66. {
  67. chart.EnsureChartComponent<Title>().subText = "显示文本标签";
  68. serie.AddExtraComponent<LabelStyle>();
  69. serie.label.show = true;
  70. chart.RefreshChart();
  71. yield return new WaitForSeconds(1);
  72. serie.labelLine.lineType = LabelLine.LineType.Curves;
  73. chart.RefreshChart();
  74. yield return new WaitForSeconds(1);
  75. serie.labelLine.lineType = LabelLine.LineType.HorizontalLine;
  76. chart.RefreshChart();
  77. yield return new WaitForSeconds(1);
  78. serie.labelLine.lineType = LabelLine.LineType.BrokenLine;
  79. chart.RefreshChart();
  80. yield return new WaitForSeconds(1);
  81. serie.labelLine.show = false;
  82. chart.RefreshChart();
  83. }
  84. IEnumerator Doughnut()
  85. {
  86. chart.EnsureChartComponent<Title>().subText = "圆环图";
  87. serie.radius[0] = 2f;
  88. while (serie.radius[0] < serie.radius[1] * 0.7f)
  89. {
  90. serie.radius[0] += m_RadiusSpeed * Time.deltaTime;
  91. chart.RefreshChart();
  92. yield return null;
  93. }
  94. serie.gap = 1f;
  95. chart.RefreshChart();
  96. yield return new WaitForSeconds(1);
  97. serie.data[0].selected = true;
  98. chart.RefreshChart();
  99. yield return new WaitForSeconds(1);
  100. serie.gap = 0f;
  101. serie.data[0].selected = false;
  102. chart.RefreshChart();
  103. yield return new WaitForSeconds(1);
  104. }
  105. IEnumerator DoublePie()
  106. {
  107. chart.EnsureChartComponent<Title>().subText = "多图组合";
  108. serie1 = chart.AddSerie<Pie>("访问来源2");
  109. chart.AddData(1, 335, "直达");
  110. chart.AddData(1, 679, "营销广告");
  111. chart.AddData(1, 1548, "搜索引擎");
  112. serie1.radius[0] = 0;
  113. serie1.radius[1] = 2f;
  114. serie1.center[0] = 0.5f;
  115. serie1.center[1] = 0.4f;
  116. chart.RefreshChart();
  117. while (serie1.radius[1] < serie.radius[0] * 0.75f)
  118. {
  119. serie1.radius[1] += m_RadiusSpeed * Time.deltaTime;
  120. chart.RefreshChart();
  121. yield return null;
  122. }
  123. if (null == serie.label)
  124. {
  125. serie.AddExtraComponent<LabelStyle>();
  126. }
  127. if (null == serie1.label)
  128. {
  129. serie1.AddExtraComponent<LabelStyle>();
  130. }
  131. serie1.label.show = true;
  132. serie1.label.position = LabelStyle.Position.Inside;
  133. serie1.label.textStyle.color = Color.white;
  134. serie1.label.textStyle.fontSize = 14;
  135. chart.RefreshChart();
  136. yield return new WaitForSeconds(1);
  137. }
  138. IEnumerator RosePie()
  139. {
  140. chart.EnsureChartComponent<Title>().subText = "玫瑰图";
  141. chart.EnsureChartComponent<Legend>().show = false;
  142. serie1.ClearData();
  143. serie.ClearData();
  144. serie1.radius = serie.radius = new float[2] { 0, 80 };
  145. serie1.label.position = LabelStyle.Position.Outside;
  146. serie1.labelLine.lineType = LabelLine.LineType.Curves;
  147. serie1.label.textStyle.color = Color.clear;
  148. for (int i = 0; i < 2; i++)
  149. {
  150. chart.AddData(i, 10, "rose1");
  151. chart.AddData(i, 5, "rose2");
  152. chart.AddData(i, 15, "rose3");
  153. chart.AddData(i, 25, "rose4");
  154. chart.AddData(i, 20, "rose5");
  155. chart.AddData(i, 35, "rose6");
  156. chart.AddData(i, 30, "rose7");
  157. chart.AddData(i, 40, "rose8");
  158. }
  159. while (serie.center[0] > 0.25f || serie1.center[0] < 0.7f)
  160. {
  161. if (serie.center[0] > 0.25f) serie.center[0] -= m_CenterSpeed * Time.deltaTime;
  162. if (serie1.center[0] < 0.7f) serie1.center[0] += m_CenterSpeed * Time.deltaTime;
  163. chart.RefreshChart();
  164. yield return null;
  165. }
  166. yield return new WaitForSeconds(1);
  167. while (serie.radius[0] > 3f)
  168. {
  169. serie.radius[0] -= m_RadiusSpeed * Time.deltaTime;
  170. serie1.radius[0] -= m_RadiusSpeed * Time.deltaTime;
  171. chart.RefreshChart();
  172. yield return null;
  173. }
  174. serie.radius[0] = 0;
  175. serie1.radius[0] = 0;
  176. serie.pieRoseType = RoseType.Area;
  177. serie1.pieRoseType = RoseType.Radius;
  178. chart.RefreshChart();
  179. yield return new WaitForSeconds(1);
  180. }
  181. }
  182. }