mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-29 12:48:47 +00:00
[improve][serie] improve min-max data range
This commit is contained in:
@@ -58,6 +58,8 @@
|
|||||||
|
|
||||||
## master
|
## master
|
||||||
|
|
||||||
|
* (2022.08.29) 优化`BarChart`在数据过密时的默认表现
|
||||||
|
* (2022.08.29) 优化`DataZoom`下Y轴的最大最小值计算
|
||||||
* (2022.08.29) 优化`CandlestickChart`大量数据绘制
|
* (2022.08.29) 优化`CandlestickChart`大量数据绘制
|
||||||
* (2022.08.28) 修复`LineChart`在堆叠和自定义Y轴范围的情况下显示不正常的问题
|
* (2022.08.28) 修复`LineChart`在堆叠和自定义Y轴范围的情况下显示不正常的问题
|
||||||
* (2022.08.26) 增加`Legend`新图标类型`Candlestick`
|
* (2022.08.26) 增加`Legend`新图标类型`Candlestick`
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ namespace XCharts.Runtime
|
|||||||
if (axis.IsCategory() || !axis.show) return;
|
if (axis.IsCategory() || !axis.show) return;
|
||||||
double tempMinValue = 0;
|
double tempMinValue = 0;
|
||||||
double tempMaxValue = 0;
|
double tempMaxValue = 0;
|
||||||
SeriesHelper.GetYMinMaxValue(chart.series, null, axis.polarIndex, true, axis.inverse, out tempMinValue,
|
SeriesHelper.GetYMinMaxValue(chart, axis.polarIndex, true, axis.inverse, out tempMinValue,
|
||||||
out tempMaxValue, true);
|
out tempMaxValue, true);
|
||||||
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
||||||
if (tempMinValue != axis.context.minValue || tempMaxValue != axis.context.maxValue)
|
if (tempMinValue != axis.context.minValue || tempMaxValue != axis.context.maxValue)
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ namespace XCharts.Runtime
|
|||||||
if (axis.IsCategory() || !axis.show) return;
|
if (axis.IsCategory() || !axis.show) return;
|
||||||
double tempMinValue = 0;
|
double tempMinValue = 0;
|
||||||
double tempMaxValue = 0;
|
double tempMaxValue = 0;
|
||||||
SeriesHelper.GetXMinMaxValue(chart.series, null, axis.polarIndex, true, axis.inverse, out tempMinValue,
|
SeriesHelper.GetXMinMaxValue(chart, axis.polarIndex, true, axis.inverse, out tempMinValue,
|
||||||
out tempMaxValue, true);
|
out tempMaxValue, true);
|
||||||
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
||||||
if (tempMinValue != axis.context.minValue || tempMaxValue != axis.context.maxValue)
|
if (tempMinValue != axis.context.minValue || tempMaxValue != axis.context.maxValue)
|
||||||
|
|||||||
@@ -464,7 +464,7 @@ namespace XCharts.Runtime
|
|||||||
Vector3 np = Vector3.zero;
|
Vector3 np = Vector3.zero;
|
||||||
double minValue = 0;
|
double minValue = 0;
|
||||||
double maxValue = 0;
|
double maxValue = 0;
|
||||||
SeriesHelper.GetYMinMaxValue(chart.series, null, 0, chart.IsAllAxisValue(), axis.inverse, out minValue, out maxValue);
|
SeriesHelper.GetYMinMaxValue(chart, 0, chart.IsAllAxisValue(), axis.inverse, out minValue, out maxValue, false, false);
|
||||||
AxisHelper.AdjustMinMaxValue(axis, ref minValue, ref maxValue, true);
|
AxisHelper.AdjustMinMaxValue(axis, ref minValue, ref maxValue, true);
|
||||||
|
|
||||||
int rate = 1;
|
int rate = 1;
|
||||||
@@ -553,7 +553,7 @@ namespace XCharts.Runtime
|
|||||||
Vector3 np = Vector3.zero;
|
Vector3 np = Vector3.zero;
|
||||||
double minValue = 0;
|
double minValue = 0;
|
||||||
double maxValue = 0;
|
double maxValue = 0;
|
||||||
SeriesHelper.GetYMinMaxValue(chart.series, null, 0, chart.IsAllAxisValue(), axis.inverse, out minValue, out maxValue);
|
SeriesHelper.GetYMinMaxValue(chart, 0, chart.IsAllAxisValue(), axis.inverse, out minValue, out maxValue);
|
||||||
AxisHelper.AdjustMinMaxValue(axis, ref minValue, ref maxValue, true);
|
AxisHelper.AdjustMinMaxValue(axis, ref minValue, ref maxValue, true);
|
||||||
|
|
||||||
int rate = 1;
|
int rate = 1;
|
||||||
|
|||||||
@@ -349,6 +349,22 @@ namespace XCharts.Runtime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DataZoom GetXDataZoomOfSerie(Serie serie)
|
||||||
|
{
|
||||||
|
if (serie == null) return null;
|
||||||
|
foreach (var component in m_Components)
|
||||||
|
{
|
||||||
|
if (component is DataZoom)
|
||||||
|
{
|
||||||
|
var dataZoom = component as DataZoom;
|
||||||
|
if (!dataZoom.enable) continue;
|
||||||
|
if (dataZoom.IsContainsXAxis(serie.xAxisIndex))
|
||||||
|
return dataZoom;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// reutrn true when all the show axis is `Value` type.
|
/// reutrn true when all the show axis is `Value` type.
|
||||||
/// |纯数值坐标轴(数值轴或对数轴)。
|
/// |纯数值坐标轴(数值轴或对数轴)。
|
||||||
|
|||||||
@@ -6,8 +6,7 @@ namespace XCharts.Runtime
|
|||||||
{
|
{
|
||||||
public partial class BaseChart
|
public partial class BaseChart
|
||||||
{
|
{
|
||||||
public virtual void InitAxisRuntimeData(Axis axis)
|
public virtual void InitAxisRuntimeData(Axis axis) { }
|
||||||
{ }
|
|
||||||
|
|
||||||
public virtual void GetSeriesMinMaxValue(Axis axis, int axisIndex, out double tempMinValue, out double tempMaxValue)
|
public virtual void GetSeriesMinMaxValue(Axis axis, int axisIndex, out double tempMinValue, out double tempMaxValue)
|
||||||
{
|
{
|
||||||
@@ -15,16 +14,16 @@ namespace XCharts.Runtime
|
|||||||
{
|
{
|
||||||
if (axis is XAxis)
|
if (axis is XAxis)
|
||||||
{
|
{
|
||||||
SeriesHelper.GetXMinMaxValue(m_Series, null, axisIndex, true, axis.inverse, out tempMinValue, out tempMaxValue);
|
SeriesHelper.GetXMinMaxValue(this, axisIndex, true, axis.inverse, out tempMinValue, out tempMaxValue);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SeriesHelper.GetYMinMaxValue(m_Series, null, axisIndex, true, axis.inverse, out tempMinValue, out tempMaxValue);
|
SeriesHelper.GetYMinMaxValue(this, axisIndex, true, axis.inverse, out tempMinValue, out tempMaxValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SeriesHelper.GetYMinMaxValue(m_Series, null, axisIndex, false, axis.inverse, out tempMinValue, out tempMaxValue);
|
SeriesHelper.GetYMinMaxValue(this, axisIndex, false, axis.inverse, out tempMinValue, out tempMaxValue);
|
||||||
}
|
}
|
||||||
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
AxisHelper.AdjustMinMaxValue(axis, ref tempMinValue, ref tempMaxValue, true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -300,10 +300,10 @@ namespace XCharts.Runtime
|
|||||||
/// <param name="axisIndex"></param>
|
/// <param name="axisIndex"></param>
|
||||||
/// <param name="minVaule"></param>
|
/// <param name="minVaule"></param>
|
||||||
/// <param name="maxValue"></param>
|
/// <param name="maxValue"></param>
|
||||||
public static void GetXMinMaxValue(List<Serie> series, DataZoom dataZoom, int axisIndex, bool isValueAxis,
|
public static void GetXMinMaxValue(BaseChart chart, int axisIndex, bool isValueAxis,
|
||||||
bool inverse, out double minVaule, out double maxValue, bool isPolar = false)
|
bool inverse, out double minVaule, out double maxValue, bool isPolar = false, bool filterByDataZoom = true)
|
||||||
{
|
{
|
||||||
GetMinMaxValue(series, dataZoom, axisIndex, isValueAxis, inverse, false, out minVaule, out maxValue, isPolar);
|
GetMinMaxValue(chart, axisIndex, isValueAxis, inverse, false, out minVaule, out maxValue, isPolar, filterByDataZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -313,19 +313,22 @@ namespace XCharts.Runtime
|
|||||||
/// <param name="axisIndex"></param>
|
/// <param name="axisIndex"></param>
|
||||||
/// <param name="minVaule"></param>
|
/// <param name="minVaule"></param>
|
||||||
/// <param name="maxValue"></param>
|
/// <param name="maxValue"></param>
|
||||||
public static void GetYMinMaxValue(List<Serie> series, DataZoom dataZoom, int axisIndex, bool isValueAxis,
|
public static void GetYMinMaxValue(BaseChart chart, int axisIndex, bool isValueAxis,
|
||||||
bool inverse, out double minVaule, out double maxValue, bool isPolar = false)
|
bool inverse, out double minVaule, out double maxValue, bool isPolar = false, bool filterByDataZoom = true)
|
||||||
{
|
{
|
||||||
GetMinMaxValue(series, dataZoom, axisIndex, isValueAxis, inverse, true, out minVaule, out maxValue, isPolar);
|
GetMinMaxValue(chart, axisIndex, isValueAxis, inverse, true, out minVaule, out maxValue, isPolar, filterByDataZoom);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Dictionary<int, List<Serie>> _stackSeriesForMinMax = new Dictionary<int, List<Serie>>();
|
private static Dictionary<int, List<Serie>> _stackSeriesForMinMax = new Dictionary<int, List<Serie>>();
|
||||||
private static Dictionary<int, double> _serieTotalValueForMinMax = new Dictionary<int, double>();
|
private static Dictionary<int, double> _serieTotalValueForMinMax = new Dictionary<int, double>();
|
||||||
public static void GetMinMaxValue(List<Serie> series, DataZoom dataZoom, int axisIndex, bool isValueAxis,
|
private static DataZoom xDataZoom, yDataZoom;
|
||||||
bool inverse, bool yValue, out double minVaule, out double maxValue, bool isPolar = false)
|
public static void GetMinMaxValue(BaseChart chart, int axisIndex, bool isValueAxis,
|
||||||
|
bool inverse, bool yValue, out double minVaule, out double maxValue, bool isPolar = false,
|
||||||
|
bool filterByDataZoom = true)
|
||||||
{
|
{
|
||||||
double min = double.MaxValue;
|
double min = double.MaxValue;
|
||||||
double max = double.MinValue;
|
double max = double.MinValue;
|
||||||
|
var series = chart.series;
|
||||||
var isPercentStack = SeriesHelper.IsPercentStack<Bar>(series);
|
var isPercentStack = SeriesHelper.IsPercentStack<Bar>(series);
|
||||||
if (!SeriesHelper.IsStack(series) || (isValueAxis && !yValue))
|
if (!SeriesHelper.IsStack(series) || (isValueAxis && !yValue))
|
||||||
{
|
{
|
||||||
@@ -343,7 +346,7 @@ namespace XCharts.Runtime
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var showData = serie.GetDataList(dataZoom);
|
var showData = serie.GetDataList(filterByDataZoom?chart.GetXDataZoomOfSerie(serie) : null);
|
||||||
if (serie is Candlestick || serie is SimplifiedCandlestick)
|
if (serie is Candlestick || serie is SimplifiedCandlestick)
|
||||||
{
|
{
|
||||||
foreach (var data in showData)
|
foreach (var data in showData)
|
||||||
@@ -381,7 +384,7 @@ namespace XCharts.Runtime
|
|||||||
if ((isPolar && serie.polarIndex != axisIndex) ||
|
if ((isPolar && serie.polarIndex != axisIndex) ||
|
||||||
(!isPolar && serie.yAxisIndex != axisIndex) ||
|
(!isPolar && serie.yAxisIndex != axisIndex) ||
|
||||||
!serie.show) continue;
|
!serie.show) continue;
|
||||||
var showData = serie.GetDataList(dataZoom);
|
var showData = serie.GetDataList(filterByDataZoom?chart.GetXDataZoomOfSerie(serie) : null);
|
||||||
if (SeriesHelper.IsPercentStack<Bar>(series, serie.stack))
|
if (SeriesHelper.IsPercentStack<Bar>(series, serie.stack))
|
||||||
{
|
{
|
||||||
for (int j = 0; j < showData.Count; j++)
|
for (int j = 0; j < showData.Count; j++)
|
||||||
|
|||||||
Reference in New Issue
Block a user