Example30_PieChart.cs 7.1 KB

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