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));
}
}
}
}
}