mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-24 09:50:15 +00:00
增加Radius、Area两种南丁格尔玫瑰图展示类型
This commit is contained in:
@@ -59,7 +59,9 @@ namespace XCharts
|
|||||||
if (m_SerieLabelToggle)
|
if (m_SerieLabelToggle)
|
||||||
{
|
{
|
||||||
height += 11 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
height += 11 * EditorGUIUtility.singleLineHeight + 10 * EditorGUIUtility.standardVerticalSpacing;
|
||||||
}else{
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
|
||||||
}
|
}
|
||||||
return height;
|
return height;
|
||||||
|
|||||||
@@ -16,10 +16,25 @@ namespace XCharts
|
|||||||
EffectScatter
|
EffectScatter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Whether to show as Nightingale chart, which distinguishs data through radius.
|
||||||
|
/// 是否展示成南丁格尔图,通过半径区分数据大小。
|
||||||
|
/// </summary>
|
||||||
public enum RoseType
|
public enum RoseType
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Don't show as Nightingale chart.不展示成南丁格尔玫瑰图
|
||||||
|
/// </summary>
|
||||||
None,
|
None,
|
||||||
|
/// <summary>
|
||||||
|
/// Use central angle to show the percentage of data, radius to show data size.
|
||||||
|
/// 扇区圆心角展现数据的百分比,半径展现数据的大小。
|
||||||
|
/// </summary>
|
||||||
Radius,
|
Radius,
|
||||||
|
/// <summary>
|
||||||
|
/// All the sectors will share the same central angle, the data size is shown only through radiuses.
|
||||||
|
/// 所有扇区圆心角相同,仅通过半径展现数据大小。
|
||||||
|
/// </summary>
|
||||||
Area
|
Area
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -55,6 +70,10 @@ namespace XCharts
|
|||||||
public int axisIndex { get { return m_AxisIndex; } set { m_AxisIndex = value; } }
|
public int axisIndex { get { return m_AxisIndex; } set { m_AxisIndex = value; } }
|
||||||
public SerieSymbol symbol { get { return m_Symbol; } set { m_Symbol = value; } }
|
public SerieSymbol symbol { get { return m_Symbol; } set { m_Symbol = value; } }
|
||||||
public bool clickOffset { get { return m_ClickOffset; } set { m_ClickOffset = 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 RoseType roseType { get { return m_RoseType; } set { m_RoseType = value; } }
|
||||||
public float space { get { return m_Space; } set { m_Space = value; } }
|
public float space { get { return m_Space; } set { m_Space = value; } }
|
||||||
public float[] center { get { return m_Center; } set { m_Center = value; } }
|
public float[] center { get { return m_Center; } set { m_Center = value; } }
|
||||||
|
|||||||
@@ -118,6 +118,14 @@ namespace XCharts
|
|||||||
|
|
||||||
float totalDegree = 360;
|
float totalDegree = 360;
|
||||||
float startDegree = 0;
|
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++)
|
for (int n = 0; n < data.Count; n++)
|
||||||
{
|
{
|
||||||
var serieData = data[n];
|
var serieData = data[n];
|
||||||
@@ -144,7 +152,7 @@ namespace XCharts
|
|||||||
tempData.angleList.Add(0);
|
tempData.angleList.Add(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
float degree = totalDegree * value / tempData.dataTotal;
|
float degree = serie.roseType == RoseType.Area ? (totalDegree / showdataCount) : (totalDegree * value / tempData.dataTotal);
|
||||||
float toDegree = startDegree + degree;
|
float toDegree = startDegree + degree;
|
||||||
|
|
||||||
float outSideRadius = serie.roseType > 0 ?
|
float outSideRadius = serie.roseType > 0 ?
|
||||||
@@ -190,7 +198,7 @@ namespace XCharts
|
|||||||
ChartHelper.DrawDoughnut(vh, center, tempData.insideRadius, outSideRadius,
|
ChartHelper.DrawDoughnut(vh, center, tempData.insideRadius, outSideRadius,
|
||||||
startDegree, toDegree, color);
|
startDegree, toDegree, color);
|
||||||
}
|
}
|
||||||
DrawLabelLine(vh, serie,tempData, outSideRadius, center, currAngle, color);
|
DrawLabelLine(vh, serie, tempData, outSideRadius, center, currAngle, color);
|
||||||
isDrawPie = true;
|
isDrawPie = true;
|
||||||
tempData.angleList.Add(toDegree);
|
tempData.angleList.Add(toDegree);
|
||||||
startDegree = toDegree;
|
startDegree = toDegree;
|
||||||
@@ -199,7 +207,7 @@ namespace XCharts
|
|||||||
raycastTarget = isClickOffset && isDataHighlight;
|
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
|
if (serie.label.show
|
||||||
&& serie.label.position == SerieLabel.Position.Outside
|
&& serie.label.position == SerieLabel.Position.Outside
|
||||||
@@ -276,6 +284,14 @@ namespace XCharts
|
|||||||
|
|
||||||
float totalDegree = 360;
|
float totalDegree = 360;
|
||||||
float startDegree = 0;
|
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++)
|
for (int n = 0; n < data.Count; n++)
|
||||||
{
|
{
|
||||||
var serieData = data[n];
|
var serieData = data[n];
|
||||||
@@ -302,7 +318,7 @@ namespace XCharts
|
|||||||
tempData.angleList.Add(0);
|
tempData.angleList.Add(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
float degree = totalDegree * value / tempData.dataTotal;
|
float degree = serie.roseType == RoseType.Area ? (totalDegree / showdataCount) : (totalDegree * value / tempData.dataTotal);
|
||||||
float toDegree = startDegree + degree;
|
float toDegree = startDegree + degree;
|
||||||
|
|
||||||
float outSideRadius = serie.roseType > 0 ?
|
float outSideRadius = serie.roseType > 0 ?
|
||||||
@@ -310,7 +326,6 @@ namespace XCharts
|
|||||||
tempData.outsideRadius;
|
tempData.outsideRadius;
|
||||||
if (serieData.highlighted)
|
if (serieData.highlighted)
|
||||||
{
|
{
|
||||||
//color *= 1.2f;
|
|
||||||
outSideRadius += m_Pie.tooltipExtraRadius;
|
outSideRadius += m_Pie.tooltipExtraRadius;
|
||||||
}
|
}
|
||||||
var offset = serie.space;
|
var offset = serie.space;
|
||||||
|
|||||||
@@ -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.28)增加`PieChart`多饼图支持
|
||||||
* (2019.07.23)优化`Theme`主题的自定义,切换主题时自定义配置不受影响
|
* (2019.07.23)优化`Theme`主题的自定义,切换主题时自定义配置不受影响
|
||||||
* (2019.07.22)增加`EffectScatter`类型的散点图
|
* (2019.07.22)增加`EffectScatter`类型的散点图
|
||||||
|
|||||||
Reference in New Issue
Block a user