增加Radius、Area两种南丁格尔玫瑰图展示类型

This commit is contained in:
monitor1394
2019-07-29 08:01:39 +08:00
parent a756f70e74
commit 08230727df
4 changed files with 44 additions and 7 deletions

View File

@@ -59,7 +59,9 @@ namespace XCharts
if (m_SerieLabelToggle)
{
height += 11 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
}else{
}
else
{
height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
}
return height;

View File

@@ -16,10 +16,25 @@ namespace XCharts
EffectScatter
}
/// <summary>
/// Whether to show as Nightingale chart, which distinguishs data through radius.
/// 是否展示成南丁格尔图,通过半径区分数据大小。
/// </summary>
public enum RoseType
{
/// <summary>
/// Don't show as Nightingale chart.不展示成南丁格尔玫瑰图
/// </summary>
None,
/// <summary>
/// Use central angle to show the percentage of data, radius to show data size.
/// 扇区圆心角展现数据的百分比,半径展现数据的大小。
/// </summary>
Radius,
/// <summary>
/// All the sectors will share the same central angle, the data size is shown only through radiuses.
/// 所有扇区圆心角相同,仅通过半径展现数据大小。
/// </summary>
Area
}
@@ -55,6 +70,10 @@ namespace XCharts
public int axisIndex { get { return m_AxisIndex; } set { m_AxisIndex = value; } }
public SerieSymbol symbol { get { return m_Symbol; } set { m_Symbol = value; } }
public bool clickOffset { get { return m_ClickOffset; } set { m_ClickOffset = value; } }
/// <summary>
/// Whether to show as Nightingale chart.
/// 是否展示成南丁格尔图,通过半径区分数据大小。
/// </summary>
public RoseType roseType { get { return m_RoseType; } set { m_RoseType = value; } }
public float space { get { return m_Space; } set { m_Space = value; } }
public float[] center { get { return m_Center; } set { m_Center = value; } }

View File

@@ -118,6 +118,14 @@ namespace XCharts
float totalDegree = 360;
float startDegree = 0;
int showdataCount = 0;
if (serie.roseType == RoseType.Area)
{
foreach (var sd in serie.data)
{
if (sd.show) showdataCount++;
}
}
for (int n = 0; n < data.Count; n++)
{
var serieData = data[n];
@@ -144,7 +152,7 @@ namespace XCharts
tempData.angleList.Add(0);
continue;
}
float degree = totalDegree * value / tempData.dataTotal;
float degree = serie.roseType == RoseType.Area ? (totalDegree / showdataCount) : (totalDegree * value / tempData.dataTotal);
float toDegree = startDegree + degree;
float outSideRadius = serie.roseType > 0 ?
@@ -190,7 +198,7 @@ namespace XCharts
ChartHelper.DrawDoughnut(vh, center, tempData.insideRadius, outSideRadius,
startDegree, toDegree, color);
}
DrawLabelLine(vh, serie,tempData, outSideRadius, center, currAngle, color);
DrawLabelLine(vh, serie, tempData, outSideRadius, center, currAngle, color);
isDrawPie = true;
tempData.angleList.Add(toDegree);
startDegree = toDegree;
@@ -199,7 +207,7 @@ namespace XCharts
raycastTarget = isClickOffset && isDataHighlight;
}
private void DrawLabelLine(VertexHelper vh, Serie serie,PieTempData tempData, float outSideRadius, Vector2 center, float currAngle, Color color)
private void DrawLabelLine(VertexHelper vh, Serie serie, PieTempData tempData, float outSideRadius, Vector2 center, float currAngle, Color color)
{
if (serie.label.show
&& serie.label.position == SerieLabel.Position.Outside
@@ -276,6 +284,14 @@ namespace XCharts
float totalDegree = 360;
float startDegree = 0;
int showdataCount = 0;
if (serie.roseType == RoseType.Area)
{
foreach (var sd in serie.data)
{
if (sd.show) showdataCount++;
}
}
for (int n = 0; n < data.Count; n++)
{
var serieData = data[n];
@@ -302,7 +318,7 @@ namespace XCharts
tempData.angleList.Add(0);
continue;
}
float degree = totalDegree * value / tempData.dataTotal;
float degree = serie.roseType == RoseType.Area ? (totalDegree / showdataCount) : (totalDegree * value / tempData.dataTotal);
float toDegree = startDegree + degree;
float outSideRadius = serie.roseType > 0 ?
@@ -310,7 +326,6 @@ namespace XCharts
tempData.outsideRadius;
if (serieData.highlighted)
{
//color *= 1.2f;
outSideRadius += m_Pie.tooltipExtraRadius;
}
var offset = serie.space;

View File

@@ -23,7 +23,8 @@ QQ交流群XCharts交流群202030963
## 更新日志
* 2019.07.29)增加`SerieLabel`配置饼图标签,支持`Center``Inside``Outside`等显示位置
* 2019.07.29)增加`Radius``Area`两种南丁格尔玫瑰图展示类型
* 2019.07.29)增加`SerieLabel`配置饼图标签,支持`Center``Inside``Outside`等显示位置
* 2019.07.28)增加`PieChart`多饼图支持
* 2019.07.23)优化`Theme`主题的自定义,切换主题时自定义配置不受影响
* 2019.07.22)增加`EffectScatter`类型的散点图