BarChart增加InSameBar实现非堆叠同柱

This commit is contained in:
monitor1394
2019-05-30 00:20:00 +08:00
parent af9a26ef6f
commit b9a2b12c38
7 changed files with 59644 additions and 81798 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -7,12 +7,14 @@ namespace XCharts
[CustomPropertyDrawer(typeof(BarChart.Bar), true)]
public class BarDrawer : PropertyDrawer
{
SerializedProperty m_InSameBar;
SerializedProperty m_BarWidth;
SerializedProperty m_Space;
bool m_BarModuleToggle = true;
private void InitProperty(SerializedProperty prop)
{
m_InSameBar = prop.FindPropertyRelative("m_InSameBar");
m_BarWidth = prop.FindPropertyRelative("m_BarWidth");
m_Space = prop.FindPropertyRelative("m_Space");
}
@@ -29,6 +31,8 @@ namespace XCharts
if (m_BarModuleToggle)
{
++EditorGUI.indentLevel;
EditorGUI.PropertyField(drawRect, m_InSameBar);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_BarWidth);
drawRect.y += EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing;
EditorGUI.PropertyField(drawRect, m_Space);
@@ -40,7 +44,7 @@ namespace XCharts
public override float GetPropertyHeight(SerializedProperty prop, GUIContent label)
{
if (m_BarModuleToggle)
return 3 * EditorGUIUtility.singleLineHeight + 2 * EditorGUIUtility.standardVerticalSpacing;
return 4 * EditorGUIUtility.singleLineHeight + 3 * EditorGUIUtility.standardVerticalSpacing;
else
return 1 * EditorGUIUtility.singleLineHeight + 1 * EditorGUIUtility.standardVerticalSpacing;
}

View File

@@ -13,9 +13,11 @@ namespace XCharts
[System.Serializable]
public class Bar
{
[SerializeField] private bool m_InSameBar;
[SerializeField] private float m_BarWidth = 0.7f;
[SerializeField] private float m_Space;
public bool inSameBar { get { return m_InSameBar; } set { m_InSameBar = value; } }
public float barWidth { get { return m_BarWidth; } set { m_BarWidth = value; } }
public float space { get { return m_Space; } set { m_Space = value; } }
}
@@ -43,7 +45,9 @@ namespace XCharts
int seriesCount = stackSeries.Count;
float scaleWid = m_YAxis.GetDataWidth(coordinateHig);
float barWid = m_Bar.barWidth > 1 ? m_Bar.barWidth : scaleWid * m_Bar.barWidth;
float offset = (scaleWid - barWid * seriesCount - m_Bar.space * (seriesCount - 1)) / 2;
float offset = m_Bar.inSameBar ?
(scaleWid - barWid - m_Bar.space * (seriesCount - 1)) / 2 :
(scaleWid - barWid * seriesCount - m_Bar.space * (seriesCount - 1)) / 2;
int serieCount = 0;
for (int j = 0; j < seriesCount; j++)
{
@@ -68,7 +72,8 @@ namespace XCharts
float pY = coordinateY + i * scaleWid;
if (!m_YAxis.boundaryGap) pY -= scaleWid / 2;
float barHig = value / (maxValue - minValue) * coordinateWid;
float space = offset + j * (barWid + m_Bar.space);
float space = m_Bar.inSameBar ? offset :
offset + j * (barWid + m_Bar.space);
seriesCurrHig[i] += barHig;
Vector3 p1 = new Vector3(pX, pY + space + barWid);
Vector3 p2 = new Vector3(pX + barHig, pY + space + barWid);
@@ -93,7 +98,8 @@ namespace XCharts
Vector3 ep = new Vector2(m_Tooltip.pointerPos.x, zeroY + coordinateHig);
DrawSplitLine(vh, false, Axis.SplitLineType.Dashed, sp, ep, m_ThemeInfo.tooltipLineColor);
float splitWidth = m_YAxis.GetSplitWidth(coordinateHig);
float pY = zeroY + (m_Tooltip.dataIndex - 1) * splitWidth + (m_YAxis.boundaryGap ? splitWidth / 2 : 0);
float pY = zeroY + (m_Tooltip.dataIndex - 1) * splitWidth +
(m_YAxis.boundaryGap ? splitWidth / 2 : 0);
sp = new Vector2(coordinateX, pY);
ep = new Vector2(coordinateX + coordinateWid, pY);
DrawSplitLine(vh, true, Axis.SplitLineType.Dashed, sp, ep, m_ThemeInfo.tooltipLineColor);
@@ -102,7 +108,8 @@ namespace XCharts
{
float tooltipSplitWid = scaleWid < 1 ? 1 : scaleWid;
float pX = coordinateX + coordinateWid;
float pY = coordinateY + scaleWid * (m_Tooltip.dataIndex - 1) - (m_YAxis.boundaryGap ? 0 : scaleWid / 2);
float pY = coordinateY + scaleWid * (m_Tooltip.dataIndex - 1) -
(m_YAxis.boundaryGap ? 0 : scaleWid / 2);
Vector3 p1 = new Vector3(coordinateX, pY);
Vector3 p2 = new Vector3(coordinateX, pY + tooltipSplitWid);
Vector3 p3 = new Vector3(pX, pY + tooltipSplitWid);
@@ -117,7 +124,9 @@ namespace XCharts
int seriesCount = stackSeries.Count;
float scaleWid = m_XAxis.GetDataWidth(coordinateWid);
float barWid = m_Bar.barWidth > 1 ? m_Bar.barWidth : scaleWid * m_Bar.barWidth;
float offset = (scaleWid - barWid * seriesCount - m_Bar.space * (seriesCount - 1)) / 2;
float offset = m_Bar.inSameBar ?
(scaleWid - barWid - m_Bar.space * (seriesCount - 1)) / 2 :
(scaleWid - barWid * seriesCount - m_Bar.space * (seriesCount - 1)) / 2;
int serieCount = 0;
for (int j = 0; j < seriesCount; j++)
{
@@ -143,7 +152,8 @@ namespace XCharts
float pY = seriesCurrHig[i] + zeroY + m_Coordinate.tickness;
float barHig = value / (maxValue - minValue) * coordinateHig;
seriesCurrHig[i] += barHig;
float space = offset + j * (barWid + m_Bar.space);
float space = m_Bar.inSameBar ? offset :
offset + j * (barWid + m_Bar.space);
Vector3 p1 = new Vector3(pX + space, pY);
Vector3 p2 = new Vector3(pX + space, pY + barHig);
Vector3 p3 = new Vector3(pX + space + barWid, pY + barHig);
@@ -177,7 +187,8 @@ namespace XCharts
else
{
float tooltipSplitWid = scaleWid < 1 ? 1 : scaleWid;
float pX = coordinateX + scaleWid * (m_Tooltip.dataIndex - 1) - (m_XAxis.boundaryGap ? 0 : scaleWid / 2);
float pX = coordinateX + scaleWid * (m_Tooltip.dataIndex - 1) -
(m_XAxis.boundaryGap ? 0 : scaleWid / 2);
float pY = coordinateY + coordinateHig;
Vector3 p1 = new Vector3(pX, coordinateY);
Vector3 p2 = new Vector3(pX, pY);

View File

@@ -37,10 +37,10 @@ namespace XCharts
protected override void Awake()
{
base.Awake();
CheckMinMaxValue();
InitSplitX();
InitSplitY();
base.Awake();
}
protected override void Update()

View File

@@ -31,7 +31,8 @@ UGUI图表库风格参考了[`ECharts`](https://www.echartsjs.com/examples/#c
5. 世界人口总量
6. 堆叠条形图
7. 深圳月最低生活费组成(单位:元)
8. 5000数据
8. 非堆叠同柱
9. 5000数据
* 饼图
1. Customized Pie
2. 环形图
@@ -46,6 +47,7 @@ UGUI图表库风格参考了[`ECharts`](https://www.echartsjs.com/examples/#c
# 更新日志
* 2019.05.29`BarChart`增加`InSameBar`实现非堆叠同柱
* 2019.05.29`Tooltip`增加`crossLabel`显示十字准星指示器
* 2019.05.24)增加`堆叠区域图`
* 2019.05.16`Value`类型的坐标轴可以设置`AxisMinMaxType`控制最大最小刻度