using UnityEngine; using System.Collections.Generic; namespace XCharts.Runtime { /// /// Polar coordinates are usually used in a circular layout. /// || 极坐标系,可以用于散点图和折线图。 /// [AddComponentMenu("XCharts/PolarChart", 23)] [ExecuteInEditMode] [RequireComponent(typeof(RectTransform))] [DisallowMultipleComponent] [HelpURL("https://xcharts-team.github.io/docs/configuration")] public class PolarChart : BaseChart { protected override void DefaultChart() { EnsureChartComponent(); EnsureChartComponent(); var radiusAxis = EnsureChartComponent(); radiusAxis.axisLabel.show = false; var tooltip = EnsureChartComponent(); tooltip.type = Tooltip.Type.Corss; tooltip.trigger = Tooltip.Trigger.Axis; RemoveData(); var serie = Line.AddDefaultSerie(this, GenerateDefaultSerieName()); serie.SetCoord(); serie.ClearData(); serie.symbol.show = false; for (int i = 0; i <= 360; i++) { var t = i / 180f * Mathf.PI; var r = Mathf.Sin(2 * t) * Mathf.Cos(2 * t) * 2; AddData(0, Mathf.Abs(r), i); } } /// /// default radial bar polar chart. /// || 默认径向柱状极坐标图。 /// public void DefaultRadialBarPolarChart() { CheckChartInit(); RemoveData(); var polarCoord = GetChartComponent(); polarCoord.radius[0] = 20; var categorys = new string[] { "a", "b", "c", "d" }; var radiusAxis = GetChartComponent(); radiusAxis.splitNumber = 4; var angleAxis = GetChartComponent(); angleAxis.type = Axis.AxisType.Category; angleAxis.startAngle = 75; angleAxis.boundaryGap = true; angleAxis.splitLine.show = false; foreach (var category in categorys) angleAxis.AddData(category); var serie = AddSerie(GenerateDefaultSerieName()); serie.SetCoord(); serie.ClearData(); serie.symbol.show = false; for (int i = 0; i < categorys.Length; i++) { var x = UnityEngine.Random.Range(0f, 4f); var y = i; AddData(0, x, y, categorys[i]); } } /// /// default tangential bar polar chart. /// || 默认切向柱状极坐标图。 /// public void DefaultTangentialBarPolarChart() { CheckChartInit(); RemoveData(); var polarCoord = GetChartComponent(); polarCoord.radius[0] = 20; var categorys = new string[] { "a", "b", "c", "d" }; var radiusAxis = GetChartComponent(); radiusAxis.type = Axis.AxisType.Category; radiusAxis.splitNumber = 4; radiusAxis.boundaryGap = true; var angleAxis = GetChartComponent(); angleAxis.type = Axis.AxisType.Value; radiusAxis.splitNumber = 12; angleAxis.startAngle = 75; angleAxis.max = 4; foreach (var category in categorys) radiusAxis.AddData(category); var serie = AddSerie(GenerateDefaultSerieName()); serie.SetCoord(); serie.ClearData(); serie.symbol.show = false; for (int i = 0; i < categorys.Length; i++) { var x = UnityEngine.Random.Range(0f, 4f); var y = i; AddData(0, y, x, categorys[i]); } } /// /// default heatmap polar chart. /// || 默认极坐标色块图。 /// public void DefaultHeatmapPolarChart() { CheckChartInit(); RemoveData(); var visualMap = EnsureChartComponent(); var colors = new List { "#BAE7FF", "#1890FF", "#1028ff" }; visualMap.AddColors(colors); visualMap.autoMinMax = true; var polarCoord = GetChartComponent(); polarCoord.radius[0] = 20; var categorys = new string[] { "a", "b", "c", "d" }; var radiusAxis = GetChartComponent(); radiusAxis.type = Axis.AxisType.Category; radiusAxis.splitNumber = 4; radiusAxis.boundaryGap = true; var angleAxis = GetChartComponent(); angleAxis.type = Axis.AxisType.Category; angleAxis.boundaryGap = true; angleAxis.splitNumber = 24; angleAxis.startAngle = 75; angleAxis.max = 4; foreach (var category in categorys) radiusAxis.AddData(category); for (int i = 0; i < 24; i++) { angleAxis.AddData(i + "h"); } var serie = AddSerie(GenerateDefaultSerieName()); serie.SetCoord(); serie.ClearData(); serie.symbol.show = false; for (int x = 0; x < 4; x++) { for (int y = 0; y < 24; y++) { AddData(0, x, y, UnityEngine.Random.Range(0f, 4f)); } } } } }