增加Bar支持X轴和Y轴都为Category类目轴

This commit is contained in:
monitor1394
2024-01-24 13:31:06 +08:00
parent 61a2da10ba
commit d93f7830de
5 changed files with 27 additions and 19 deletions

View File

@@ -70,6 +70,7 @@ slug: /changelog
## master ## master
* (2024.01.24) 增加`Bar`支持X轴和Y轴都为`Category`类目轴
* (2024.01.23) 增加`{y}`通配符用于获取Y轴的类目名 * (2024.01.23) 增加`{y}`通配符用于获取Y轴的类目名
* (2024.01.23) 增加`Line`支持X轴和Y轴都为`Category`类目轴 * (2024.01.23) 增加`Line`支持X轴和Y轴都为`Category`类目轴
* (2024.01.18) 修复`Animation``type`代码动态修改无效的问题 * (2024.01.18) 修复`Animation``type`代码动态修改无效的问题

View File

@@ -178,6 +178,7 @@ namespace XCharts.Runtime
var barCount = chart.GetSerieBarRealCount<Bar>(); var barCount = chart.GetSerieBarRealCount<Bar>();
float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom);
float relativedCategoryWidth = AxisHelper.GetDataWidth(relativedAxis, relativedAxisLength, showData.Count, dataZoom);
float barGap = chart.GetSerieBarGap<Bar>(); float barGap = chart.GetSerieBarGap<Bar>();
float totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap, barCount); float totalBarWidth = chart.GetSerieTotalWidth<Bar>(categoryWidth, barGap, barCount);
float barWidth = serie.GetBarWidth(categoryWidth, barCount); float barWidth = serie.GetBarWidth(categoryWidth, barCount);
@@ -231,7 +232,7 @@ namespace XCharts.Runtime
var pX = 0f; var pX = 0f;
var pY = 0f; var pY = 0f;
UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, isStack, value, ref pX, ref pY); UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, relativedCategoryWidth, barWidth, isStack, value, ref pX, ref pY);
var barHig = 0f; var barHig = 0f;
if (isPercentStack) if (isPercentStack)
{ {
@@ -240,7 +241,7 @@ namespace XCharts.Runtime
} }
else else
{ {
barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue); barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, relativedCategoryWidth, relativedValue);
} }
float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top; Vector3 plb, plt, prt, prb, top;
@@ -295,7 +296,8 @@ namespace XCharts.Runtime
} }
} }
private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, bool isStack, private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i,
float categoryWidth, float relativedCategoryWidth, float barWidth, bool isStack,
double value, ref float pX, ref float pY) double value, ref float pX, ref float pY)
{ {
if (isY) if (isY)
@@ -313,7 +315,7 @@ namespace XCharts.Runtime
pY = grid.context.y + valueLen - categoryWidth * 0.5f; pY = grid.context.y + valueLen - categoryWidth * 0.5f;
} }
} }
pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0);
if (isStack) if (isStack)
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)
@@ -335,7 +337,7 @@ namespace XCharts.Runtime
pX = grid.context.x + valueLen - categoryWidth * 0.5f; pX = grid.context.x + valueLen - categoryWidth * 0.5f;
} }
} }
pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0);
if (isStack) if (isStack)
{ {
for (int n = 0; n < m_StackSerieData.Count - 1; n++) for (int n = 0; n < m_StackSerieData.Count - 1; n++)

View File

@@ -119,10 +119,12 @@ namespace XCharts.Runtime
return; return;
var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width;
var relativedAxisLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height;
var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x; var axisXY = isY ? m_SerieGrid.context.y : m_SerieGrid.context.x;
var barCount = chart.GetSerieBarRealCount<SimplifiedBar>(); var barCount = chart.GetSerieBarRealCount<SimplifiedBar>();
float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom); float categoryWidth = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom);
float relativedCategoryWidth = AxisHelper.GetDataWidth(relativedAxis, relativedAxisLength, showData.Count, dataZoom);
float barGap = chart.GetSerieBarGap<SimplifiedBar>(); float barGap = chart.GetSerieBarGap<SimplifiedBar>();
float totalBarWidth = chart.GetSerieTotalWidth<SimplifiedBar>(categoryWidth, barGap, barCount); float totalBarWidth = chart.GetSerieTotalWidth<SimplifiedBar>(categoryWidth, barGap, barCount);
float barWidth = serie.GetBarWidth(categoryWidth, barCount); float barWidth = serie.GetBarWidth(categoryWidth, barCount);
@@ -172,9 +174,9 @@ namespace XCharts.Runtime
var pX = 0f; var pX = 0f;
var pY = 0f; var pY = 0f;
UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, barWidth, value, ref pX, ref pY); UpdateXYPosition(m_SerieGrid, isY, axis, relativedAxis, i, categoryWidth, relativedCategoryWidth, barWidth, value, ref pX, ref pY);
var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, categoryWidth, relativedValue); var barHig = AxisHelper.GetAxisValueLength(m_SerieGrid, relativedAxis, relativedCategoryWidth, relativedValue);
var currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig); var currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top; Vector3 plb, plt, prt, prb, top;
@@ -204,8 +206,8 @@ namespace XCharts.Runtime
} }
} }
private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth, float barWidth, private void UpdateXYPosition(GridCoord grid, bool isY, Axis axis, Axis relativedAxis, int i, float categoryWidth,
double value, ref float pX, ref float pY) float relativedCategoryWidth, float barWidth, double value, ref float pX, ref float pY)
{ {
if (isY) if (isY)
{ {
@@ -218,7 +220,7 @@ namespace XCharts.Runtime
if (axis.context.minMaxRange <= 0) pY = grid.context.y; if (axis.context.minMaxRange <= 0) pY = grid.context.y;
else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth); else pY = grid.context.y + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.height - barWidth);
} }
pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); pX = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0);
} }
else else
{ {
@@ -231,7 +233,7 @@ namespace XCharts.Runtime
if (axis.context.minMaxRange <= 0) pX = grid.context.x; if (axis.context.minMaxRange <= 0) pX = grid.context.x;
else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth); else pX = grid.context.x + (float)((value - axis.context.minValue) / axis.context.minMaxRange) * (grid.context.width - barWidth);
} }
pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, categoryWidth, 0); pY = AxisHelper.GetAxisValuePosition(grid, relativedAxis, relativedCategoryWidth, 0);
} }
} }

View File

@@ -279,7 +279,6 @@ namespace XCharts.Runtime
var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width; var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width;
var axisRelativedLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height; var axisRelativedLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height;
int maxCount = serie.maxShow > 0 ? int maxCount = serie.maxShow > 0 ?
(serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) :
showData.Count; showData.Count;

View File

@@ -160,12 +160,15 @@ namespace XCharts.Runtime
if (showData.Count <= 0) if (showData.Count <= 0)
return; return;
var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width;
var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, showData.Count, dataZoom);
int maxCount = serie.maxShow > 0 ? int maxCount = serie.maxShow > 0 ?
(serie.maxShow > showData.Count ? showData.Count : serie.maxShow) : (serie.maxShow > showData.Count ? showData.Count : serie.maxShow) :
showData.Count; showData.Count;
var axisLength = isY ? m_SerieGrid.context.height : m_SerieGrid.context.width;
var axisRelativedLength = isY ? m_SerieGrid.context.width : m_SerieGrid.context.height;
var scaleWid = AxisHelper.GetDataWidth(axis, axisLength, maxCount, dataZoom);
var scaleRelativedWid = AxisHelper.GetDataWidth(relativedAxis, axisRelativedLength, maxCount, dataZoom);
int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false); int rate = LineHelper.GetDataAverageRate(serie, m_SerieGrid, maxCount, false);
var totalAverage = serie.sampleAverage > 0 ? var totalAverage = serie.sampleAverage > 0 ?
serie.sampleAverage : serie.sampleAverage :
@@ -179,6 +182,7 @@ namespace XCharts.Runtime
var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth); var lineWidth = LineHelper.GetLineWidth(ref interacting, serie, chart.theme.serie.lineWidth);
axis.context.scaleWidth = scaleWid; axis.context.scaleWidth = scaleWid;
relativedAxis.context.scaleWidth = scaleRelativedWid;
serie.containerIndex = m_SerieGrid.index; serie.containerIndex = m_SerieGrid.index;
serie.containterInstanceId = m_SerieGrid.instanceId; serie.containterInstanceId = m_SerieGrid.instanceId;
@@ -203,7 +207,7 @@ namespace XCharts.Runtime
maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime); maxCount, totalAverage, i, dataAddDuration, dataChangeDuration, ref dataChanging, relativedAxis, unscaledTime);
serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue, serieData.context.stackHeight = GetDataPoint(isY, axis, relativedAxis, m_SerieGrid, xValue, relativedValue,
i, scaleWid, false, ref np); i, scaleWid, scaleRelativedWid, false, ref np);
serieData.context.position = np; serieData.context.position = np;
@@ -235,14 +239,14 @@ namespace XCharts.Runtime
} }
private float GetDataPoint(bool isY, Axis axis, Axis relativedAxis, GridCoord grid, double xValue, private float GetDataPoint(bool isY, Axis axis, Axis relativedAxis, GridCoord grid, double xValue,
double yValue, int i, float scaleWid, bool isStack, ref Vector3 np) double yValue, int i, float scaleWid, float scaleRelativedWid, bool isStack, ref Vector3 np)
{ {
float xPos, yPos; float xPos, yPos;
var gridXY = isY ? grid.context.x : grid.context.y; var gridXY = isY ? grid.context.x : grid.context.y;
if (isY) if (isY)
{ {
var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue); var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleRelativedWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
xPos = gridXY + valueHig; xPos = gridXY + valueHig;
@@ -251,7 +255,7 @@ namespace XCharts.Runtime
else else
{ {
var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleWid, yValue); var valueHig = AxisHelper.GetAxisValueDistance(grid, relativedAxis, scaleRelativedWid, yValue);
valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig); valueHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, valueHig);
yPos = gridXY + valueHig; yPos = gridXY + valueHig;