Example10_LineChart.cs 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. using System.Collections;
  2. using UnityEngine;
  3. using XCharts.Runtime;
  4. namespace XCharts.Example
  5. {
  6. [DisallowMultipleComponent]
  7. public class Example10_LineChart : MonoBehaviour
  8. {
  9. private LineChart chart;
  10. private Serie serie;
  11. private int m_DataNum = 8;
  12. private void OnEnable()
  13. {
  14. StartCoroutine(PieDemo());
  15. }
  16. IEnumerator PieDemo()
  17. {
  18. while (true)
  19. {
  20. StartCoroutine(AddSimpleLine());
  21. yield return new WaitForSeconds(2);
  22. StartCoroutine(ChangeLineType());
  23. yield return new WaitForSeconds(8);
  24. StartCoroutine(LineAreaStyleSettings());
  25. yield return new WaitForSeconds(5);
  26. StartCoroutine(LineArrowSettings());
  27. yield return new WaitForSeconds(2);
  28. StartCoroutine(LineSymbolSettings());
  29. yield return new WaitForSeconds(7);
  30. StartCoroutine(LineLabelSettings());
  31. yield return new WaitForSeconds(3);
  32. StartCoroutine(LineMutilSerie());
  33. yield return new WaitForSeconds(5);
  34. }
  35. }
  36. IEnumerator AddSimpleLine()
  37. {
  38. chart = gameObject.GetComponent<LineChart>();
  39. if (chart == null){
  40. chart = gameObject.AddComponent<LineChart>();
  41. chart.Init();
  42. }
  43. chart.GetChartComponent<Title>().text = "LineChart - 折线图";
  44. chart.GetChartComponent<Title>().subText = "普通折线图";
  45. var yAxis = chart.GetChartComponent<YAxis>();
  46. yAxis.minMaxType = Axis.AxisMinMaxType.Custom;
  47. yAxis.min = 0;
  48. yAxis.max = 100;
  49. chart.RemoveData();
  50. serie = chart.AddSerie<Line>("Line");
  51. for (int i = 0; i < m_DataNum; i++)
  52. {
  53. chart.AddXAxisData("x" + (i + 1));
  54. chart.AddData(0, UnityEngine.Random.Range(30, 90));
  55. }
  56. yield return new WaitForSeconds(1);
  57. }
  58. IEnumerator ChangeLineType()
  59. {
  60. chart.GetChartComponent<Title>().subText = "LineTyle - 曲线图";
  61. serie.lineType = LineType.Smooth;
  62. chart.RefreshChart();
  63. yield return new WaitForSeconds(1);
  64. chart.GetChartComponent<Title>().subText = "LineTyle - 阶梯线图";
  65. serie.lineType = LineType.StepStart;
  66. chart.RefreshChart();
  67. yield return new WaitForSeconds(1);
  68. serie.lineType = LineType.StepMiddle;
  69. chart.RefreshChart();
  70. yield return new WaitForSeconds(1);
  71. serie.lineType = LineType.StepEnd;
  72. chart.RefreshChart();
  73. yield return new WaitForSeconds(1);
  74. chart.GetChartComponent<Title>().subText = "LineTyle - 虚线";
  75. serie.lineStyle.type = LineStyle.Type.Dashed;
  76. chart.RefreshChart();
  77. yield return new WaitForSeconds(1);
  78. chart.GetChartComponent<Title>().subText = "LineTyle - 点线";
  79. serie.lineStyle.type = LineStyle.Type.Dotted;
  80. chart.RefreshChart();
  81. yield return new WaitForSeconds(1);
  82. chart.GetChartComponent<Title>().subText = "LineTyle - 点划线";
  83. serie.lineStyle.type = LineStyle.Type.DashDot;
  84. chart.RefreshChart();
  85. yield return new WaitForSeconds(1);
  86. chart.GetChartComponent<Title>().subText = "LineTyle - 双点划线";
  87. serie.lineStyle.type = LineStyle.Type.DashDotDot;
  88. chart.RefreshChart();
  89. serie.lineType = LineType.Normal;
  90. chart.RefreshChart();
  91. }
  92. IEnumerator LineAreaStyleSettings()
  93. {
  94. chart.GetChartComponent<Title>().subText = "AreaStyle 面积图";
  95. serie.EnsureComponent<AreaStyle>();
  96. serie.areaStyle.show = true;
  97. chart.RefreshChart();
  98. yield return new WaitForSeconds(1f);
  99. chart.GetChartComponent<Title>().subText = "AreaStyle 面积图";
  100. serie.lineType = LineType.Smooth;
  101. serie.areaStyle.show = true;
  102. chart.RefreshChart();
  103. yield return new WaitForSeconds(1f);
  104. chart.GetChartComponent<Title>().subText = "AreaStyle 面积图 - 调整透明度";
  105. while (serie.areaStyle.opacity > 0.4)
  106. {
  107. serie.areaStyle.opacity -= 0.6f * Time.deltaTime;
  108. chart.RefreshChart();
  109. yield return null;
  110. }
  111. yield return new WaitForSeconds(1);
  112. chart.GetChartComponent<Title>().subText = "AreaStyle 面积图 - 渐变";
  113. serie.areaStyle.toColor = Color.white;
  114. chart.RefreshChart();
  115. yield return new WaitForSeconds(1);
  116. }
  117. IEnumerator LineArrowSettings()
  118. {
  119. chart.GetChartComponent<Title>().subText = "LineArrow 头部箭头";
  120. chart.GetSerie(0).EnsureComponent<LineArrow>();
  121. serie.lineArrow.show = true;
  122. serie.lineArrow.position = LineArrow.Position.Start;
  123. chart.RefreshChart();
  124. yield return new WaitForSeconds(1);
  125. chart.GetChartComponent<Title>().subText = "LineArrow 尾部箭头";
  126. serie.lineArrow.position = LineArrow.Position.End;
  127. chart.RefreshChart();
  128. yield return new WaitForSeconds(1);
  129. serie.lineArrow.show = false;
  130. }
  131. /// <summary>
  132. /// SerieSymbol 相关设置
  133. /// </summary>
  134. /// <returns></returns>
  135. IEnumerator LineSymbolSettings()
  136. {
  137. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记";
  138. while (serie.symbol.size < 5)
  139. {
  140. serie.symbol.size += 2.5f * Time.deltaTime;
  141. chart.RefreshChart();
  142. yield return null;
  143. }
  144. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记 - 空心圆";
  145. yield return new WaitForSeconds(1);
  146. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记 - 实心圆";
  147. serie.symbol.type = SymbolType.Circle;
  148. chart.RefreshChart();
  149. yield return new WaitForSeconds(1);
  150. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记 - 三角形";
  151. serie.symbol.type = SymbolType.Triangle;
  152. chart.RefreshChart();
  153. yield return new WaitForSeconds(1);
  154. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记 - 正方形";
  155. serie.symbol.type = SymbolType.Rect;
  156. chart.RefreshChart();
  157. yield return new WaitForSeconds(1);
  158. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记 - 菱形";
  159. serie.symbol.type = SymbolType.Diamond;
  160. chart.RefreshChart();
  161. yield return new WaitForSeconds(1);
  162. chart.GetChartComponent<Title>().subText = "SerieSymbol 图形标记";
  163. serie.symbol.type = SymbolType.EmptyCircle;
  164. chart.RefreshChart();
  165. yield return new WaitForSeconds(1);
  166. }
  167. /// <summary>
  168. /// SerieLabel相关配置
  169. /// </summary>
  170. /// <returns></returns>
  171. IEnumerator LineLabelSettings()
  172. {
  173. chart.GetChartComponent<Title>().subText = "SerieLabel 文本标签";
  174. serie.EnsureComponent<LabelStyle>();
  175. chart.RefreshChart();
  176. while (serie.label.offset[1] < 20)
  177. {
  178. serie.label.offset = new Vector3(serie.label.offset.x, serie.label.offset.y + 20f * Time.deltaTime);
  179. chart.RefreshChart();
  180. yield return null;
  181. }
  182. yield return new WaitForSeconds(1);
  183. chart.RefreshChart();
  184. yield return new WaitForSeconds(1);
  185. serie.label.textStyle.color = Color.white;
  186. serie.label.background.color = Color.grey;
  187. serie.labelDirty = true;
  188. chart.RefreshChart();
  189. yield return new WaitForSeconds(1);
  190. serie.label.show = false;
  191. chart.RefreshChart();
  192. }
  193. /// <summary>
  194. /// 添加多条线图
  195. /// </summary>
  196. /// <returns></returns>
  197. IEnumerator LineMutilSerie()
  198. {
  199. chart.GetChartComponent<Title>().subText = "多系列";
  200. var serie2 = chart.AddSerie<Line>("Line2");
  201. serie2.lineType = LineType.Normal;
  202. for (int i = 0; i < m_DataNum; i++)
  203. {
  204. chart.AddData(1, UnityEngine.Random.Range(30, 90));
  205. }
  206. yield return new WaitForSeconds(1);
  207. var serie3 = chart.AddSerie<Line>("Line3");
  208. serie3.lineType = LineType.Normal;
  209. for (int i = 0; i < m_DataNum; i++)
  210. {
  211. chart.AddData(2, UnityEngine.Random.Range(30, 90));
  212. }
  213. yield return new WaitForSeconds(1);
  214. var yAxis = chart.GetChartComponent<YAxis>();
  215. yAxis.minMaxType = Axis.AxisMinMaxType.Default;
  216. chart.GetChartComponent<Title>().subText = "多系列 - 堆叠";
  217. serie.stack = "samename";
  218. serie2.stack = "samename";
  219. serie3.stack = "samename";
  220. chart.RefreshChart();
  221. yield return new WaitForSeconds(1);
  222. }
  223. }
  224. }