| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 | using UnityEngine;using System.Collections.Generic;namespace XCharts.Runtime{    /// <summary>    /// Polar coordinates are usually used in a circular layout.    /// || 极坐标系,可以用于散点图和折线图。    /// </summary>    [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<PolarCoord>();            EnsureChartComponent<AngleAxis>();            var radiusAxis = EnsureChartComponent<RadiusAxis>();            radiusAxis.axisLabel.show = false;            var tooltip = EnsureChartComponent<Tooltip>();            tooltip.type = Tooltip.Type.Corss;            tooltip.trigger = Tooltip.Trigger.Axis;            RemoveData();            var serie = Line.AddDefaultSerie(this, GenerateDefaultSerieName());            serie.SetCoord<PolarCoord>();            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);            }        }        /// <summary>        /// default radial bar polar chart.        /// || 默认径向柱状极坐标图。        /// </summary>        public void DefaultRadialBarPolarChart()        {            CheckChartInit();            RemoveData();            var polarCoord = GetChartComponent<PolarCoord>();            polarCoord.radius[0] = 20;            var categorys = new string[] { "a", "b", "c", "d" };            var radiusAxis = GetChartComponent<RadiusAxis>();            radiusAxis.splitNumber = 4;            var angleAxis = GetChartComponent<AngleAxis>();            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<Bar>(GenerateDefaultSerieName());            serie.SetCoord<PolarCoord>();            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]);            }        }        /// <summary>        /// default tangential bar polar chart.        /// || 默认切向柱状极坐标图。        /// </summary>        public void DefaultTangentialBarPolarChart()        {            CheckChartInit();            RemoveData();            var polarCoord = GetChartComponent<PolarCoord>();            polarCoord.radius[0] = 20;            var categorys = new string[] { "a", "b", "c", "d" };            var radiusAxis = GetChartComponent<RadiusAxis>();            radiusAxis.type = Axis.AxisType.Category;            radiusAxis.splitNumber = 4;            radiusAxis.boundaryGap = true;            var angleAxis = GetChartComponent<AngleAxis>();            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<Bar>(GenerateDefaultSerieName());            serie.SetCoord<PolarCoord>();            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]);            }        }        /// <summary>        /// default heatmap polar chart.        /// || 默认极坐标色块图。         /// </summary>        public void DefaultHeatmapPolarChart()        {            CheckChartInit();            RemoveData();            var visualMap = EnsureChartComponent<VisualMap>();            var colors = new List<string> { "#BAE7FF", "#1890FF", "#1028ff" };            visualMap.AddColors(colors);            visualMap.autoMinMax = true;            var polarCoord = GetChartComponent<PolarCoord>();            polarCoord.radius[0] = 20;            var categorys = new string[] { "a", "b", "c", "d" };            var radiusAxis = GetChartComponent<RadiusAxis>();            radiusAxis.type = Axis.AxisType.Category;            radiusAxis.splitNumber = 4;            radiusAxis.boundaryGap = true;            var angleAxis = GetChartComponent<AngleAxis>();            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<Heatmap>(GenerateDefaultSerieName());            serie.SetCoord<PolarCoord>();            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));                }            }        }    }}
 |