[feature][datazoom] support time axis

This commit is contained in:
monitor1394
2022-07-15 08:37:14 +08:00
parent 96a49f2b11
commit aee49322b7
4 changed files with 69 additions and 47 deletions

View File

@@ -57,8 +57,21 @@
## master
* (2022.07.15) 增加`DataZoom``Time`时间轴的支持
## 3.1.0
### 版本要点
* 优化`Axis`
* 优化`Tooltip`
* 优化平滑曲线算法
* 优化代码动态创建图表
* 完善配置项手册
* 修复若干问题
### 日志详情
* (2022.07.12) 发布`v3.1.0`版本
* (2022.07.12) 修复`Serie``ignoreLineBreak`不生效的问题
* (2022.07.07) 优化`Axis``minMaxType`指定为`MinMax`时支持精确到小数

View File

@@ -144,6 +144,15 @@ namespace XCharts
double tempMaxValue = 0;
chart.GetSeriesMinMaxValue(axis, axisIndex, out tempMinValue, out tempMaxValue);
var dataZoom = chart.GetDataZoomOfAxis(axis);
if (dataZoom != null && dataZoom.enable)
{
if (axis is XAxis)
dataZoom.SetXAxisIndexValueInfo(axisIndex, ref tempMinValue, ref tempMaxValue);
else
dataZoom.SetYAxisIndexValueInfo(axisIndex, ref tempMinValue, ref tempMaxValue);
}
if (tempMinValue != axis.context.minValue ||
tempMaxValue != axis.context.maxValue ||
m_LastInterval != axis.interval ||
@@ -189,14 +198,7 @@ namespace XCharts
axis.context.zeroY = grid.context.y - (float) (axis.context.minValue * grid.context.height / axis.context.minMaxRange);
}
}
var dataZoom = chart.GetDataZoomOfAxis(axis);
if (dataZoom != null && dataZoom.enable)
{
if (axis is XAxis)
dataZoom.SetXAxisIndexValueInfo(axisIndex, tempMinValue, tempMaxValue);
else
dataZoom.SetYAxisIndexValueInfo(axisIndex, tempMinValue, tempMaxValue);
}
if (updateChart)
{
UpdateAxisLabelText(axis);

View File

@@ -366,6 +366,8 @@ namespace XCharts.Runtime
class AxisIndexValueInfo
{
public double rawMin;
public double rawMax;
public double min;
public double max;
}
@@ -617,38 +619,36 @@ namespace XCharts.Runtime
context.height = chartHeight - runtimeTop - runtimeBottom;
}
internal void SetXAxisIndexValueInfo(int xAxisIndex, double min, double max)
internal void SetXAxisIndexValueInfo(int xAxisIndex, ref double min, ref double max)
{
if (!m_XAxisIndexInfos.ContainsKey(xAxisIndex))
AxisIndexValueInfo info;
if (!m_XAxisIndexInfos.TryGetValue(xAxisIndex, out info))
{
m_XAxisIndexInfos[xAxisIndex] = new AxisIndexValueInfo()
{
min = min,
max = max
};
}
else
{
m_XAxisIndexInfos[xAxisIndex].min = min;
m_XAxisIndexInfos[xAxisIndex].max = max;
info = new AxisIndexValueInfo();
m_XAxisIndexInfos[xAxisIndex] = info;
}
info.rawMin = min;
info.rawMax = max;
info.min = min + (max - min) * start / 100;
info.max = min + (max - min) * end / 100;
min = info.min;
max = info.max;
}
internal void SetYAxisIndexValueInfo(int yAxisIndex, double min, double max)
internal void SetYAxisIndexValueInfo(int yAxisIndex, ref double min, ref double max)
{
if (!m_YAxisIndexInfos.ContainsKey(yAxisIndex))
AxisIndexValueInfo info;
if (!m_YAxisIndexInfos.TryGetValue(yAxisIndex, out info))
{
m_YAxisIndexInfos[yAxisIndex] = new AxisIndexValueInfo()
{
min = min,
max = max
};
}
else
{
m_YAxisIndexInfos[yAxisIndex].min = min;
m_YAxisIndexInfos[yAxisIndex].max = max;
info = new AxisIndexValueInfo();
m_YAxisIndexInfos[yAxisIndex] = info;
}
info.rawMin = min;
info.rawMax = max;
info.min = min + (max - min) * start / 100;
info.max = min + (max - min) * end / 100;
min = info.min;
max = info.max;
}
internal bool IsXAxisIndexValue(int axisIndex)
@@ -663,24 +663,32 @@ namespace XCharts.Runtime
internal void GetXAxisIndexValue(int axisIndex, out double min, out double max)
{
min = 0;
max = 0;
if (m_XAxisIndexInfos.ContainsKey(axisIndex))
AxisIndexValueInfo info;
if (m_XAxisIndexInfos.TryGetValue(axisIndex, out info))
{
var info = m_XAxisIndexInfos[axisIndex];
min = info.min;
max = info.max;
var range = info.rawMax - info.rawMin;
min = info.rawMin + range * m_Start / 100;
max = info.rawMin + range * m_End / 100;
}
else
{
min = 0;
max = 0;
}
}
internal void GetYAxisIndexValue(int axisIndex, out double min, out double max)
{
min = 0;
max = 0;
if (m_YAxisIndexInfos.ContainsKey(axisIndex))
AxisIndexValueInfo info;
if (m_YAxisIndexInfos.TryGetValue(axisIndex, out info))
{
var info = m_YAxisIndexInfos[axisIndex];
min = info.min;
max = info.max;
var range = info.rawMax - info.rawMin;
min = info.rawMin + range * m_Start / 100;
max = info.rawMin + range * m_End / 100;
}
else
{
min = 0;
max = 0;
}
}
}

View File

@@ -644,10 +644,9 @@ namespace XCharts.Runtime
private static void UpdateFilterData_XAxisValue(Serie serie, DataZoom dataZoom, int dimension, double min, double max)
{
var data = serie.data;
var startValue = min + (max - min) * dataZoom.start / 100;
var endValue = min + (max - min) * dataZoom.end / 100;
var startValue = min;
var endValue = max;
if (endValue < startValue) endValue = startValue;
if (startValue != serie.m_FilterStartValue || endValue != serie.m_FilterEndValue ||
dataZoom.minShowNum != serie.m_FilterMinShow || serie.m_NeedUpdateFilterData)
{