[improve][Candlestick] improve CandlestickChart

This commit is contained in:
monitor1394
2022-08-26 23:17:54 +08:00
parent a1d8f34720
commit a885be625e
9 changed files with 26 additions and 21 deletions

View File

@@ -58,8 +58,9 @@
## master ## master
* (2022.08.25) 增加`Tooltip``position`参数支持设置移动平台不同的显示位置 * (2022.08.26) 优化`CandlestickChart`表现,调整相关的`AddData()`接口参数
* (2022.08.25) 删除`Tooltip``fixedXEnable``fixedYEnable`参数 * (2022.08.26) 增加`Tooltip``position`参数支持设置移动平台不同的显示位置
* (2022.08.26) 删除`Tooltip``fixedXEnable``fixedYEnable`参数
* (2022.08.25) 优化`EmphasisStyle``label`的支持 * (2022.08.25) 优化`EmphasisStyle``label`的支持
* (2022.08.25) 增加`formatter``{d3}`指定维度数据百分比的支持 * (2022.08.25) 增加`formatter``{d3}`指定维度数据百分比的支持
* (2022.08.24) 修复`ScatterChart``label`不刷新的问题 * (2022.08.24) 修复`ScatterChart``label`不刷新的问题

View File

@@ -7,6 +7,7 @@ namespace XCharts.Editor
{ {
public override void OnCustomInspectorGUI() public override void OnCustomInspectorGUI()
{ {
PropertyField("m_ColorBy");
PropertyField("m_XAxisIndex"); PropertyField("m_XAxisIndex");
PropertyField("m_YAxisIndex"); PropertyField("m_YAxisIndex");
PropertyFieldLimitMin("m_MinShow", 0); PropertyFieldLimitMin("m_MinShow", 0);

View File

@@ -61,7 +61,7 @@ namespace XCharts.Example
var heighest = boxVals[3]; var heighest = boxVals[3];
chart.AddXAxisData(i.ToString()); chart.AddXAxisData(i.ToString());
chart.AddData(0, open, close, lowest, heighest); chart.AddData(0, i, open, close, lowest, heighest);
} }
} }
} }

View File

@@ -377,23 +377,23 @@ namespace XCharts.Runtime
return AddData(serieIndex, xValue, yValue, dataName, dataId); return AddData(serieIndex, xValue, yValue, dataName, dataId);
} }
public SerieData AddData(int serieIndex, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null) public SerieData AddData(int serieIndex, double indexOrTimestamp, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{ {
var serie = GetSerie(serieIndex); var serie = GetSerie(serieIndex);
if (serie != null) if (serie != null)
{ {
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId); var serieData = serie.AddData(indexOrTimestamp, open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter); RefreshPainter(serie.painter);
return serieData; return serieData;
} }
return null; return null;
} }
public SerieData AddData(string serieName, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null) public SerieData AddData(string serieName, double indexOrTimestamp, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{ {
var serie = GetSerie(serieName); var serie = GetSerie(serieName);
if (serie != null) if (serie != null)
{ {
var serieData = serie.AddData(open, close, lowest, heighest, dataName, dataId); var serieData = serie.AddData(indexOrTimestamp, open, close, lowest, heighest, dataName, dataId);
RefreshPainter(serie.painter); RefreshPainter(serie.painter);
return serieData; return serieData;
} }

View File

@@ -22,7 +22,7 @@ namespace XCharts.Runtime
var close = Random.Range(40, 90); var close = Random.Range(40, 90);
var lowest = Random.Range(0, 50); var lowest = Random.Range(0, 50);
var heighest = Random.Range(50, 100); var heighest = Random.Range(50, 100);
chart.AddData(serie.index, open, close, lowest, heighest); chart.AddData(serie.index, i, open, close, lowest, heighest);
} }
return serie; return serie;
} }

View File

@@ -108,7 +108,7 @@ namespace XCharts.Runtime
for (int i = serie.minShow; i < maxCount; i++) for (int i = serie.minShow; i < maxCount; i++)
{ {
var serieData = showData[i]; var serieData = showData[i];
if (serie.IsIgnoreValue(serieData)) if (!serieData.show || serie.IsIgnoreValue(serieData))
{ {
serie.context.dataPoints.Add(Vector3.zero); serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index); serie.context.dataIndexs.Add(serieData.index);
@@ -116,10 +116,11 @@ namespace XCharts.Runtime
} }
var state = SerieHelper.GetSerieState(serie, serieData); var state = SerieHelper.GetSerieState(serie, serieData);
var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state); var itemStyle = SerieHelper.GetItemStyle(serie, serieData, state);
var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var lowest = serieData.GetCurrData(2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var heighest = serieData.GetCurrData(3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var isRise = yAxis.inverse ? close<open : close> open; var isRise = yAxis.inverse ? close<open : close> open;
var borderWidth = open == 0 ? 0f : var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :

View File

@@ -25,7 +25,7 @@ namespace XCharts.Runtime
var close = lastValue + Random.Range(-5, 10); var close = lastValue + Random.Range(-5, 10);
var lowest = lastValue + Random.Range(-15, -10); var lowest = lastValue + Random.Range(-15, -10);
var heighest = lastValue + Random.Range(10, 20); var heighest = lastValue + Random.Range(10, 20);
chart.AddData(serie.index, open, close, lowest, heighest); chart.AddData(serie.index, i, open, close, lowest, heighest);
} }
return serie; return serie;
} }

View File

@@ -110,16 +110,17 @@ namespace XCharts.Runtime
for (int i = serie.minShow; i < maxCount; i++) for (int i = serie.minShow; i < maxCount; i++)
{ {
var serieData = showData[i]; var serieData = showData[i];
if (serie.IsIgnoreValue(serieData)) if (!serieData.show || serie.IsIgnoreValue(serieData))
{ {
serie.context.dataPoints.Add(Vector3.zero); serie.context.dataPoints.Add(Vector3.zero);
serie.context.dataIndexs.Add(serieData.index); serie.context.dataIndexs.Add(serieData.index);
continue; continue;
} }
var open = serieData.GetCurrData(0, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var startDataIndex = serieData.data.Count > 4 ? 1 : 0;
var close = serieData.GetCurrData(1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var open = serieData.GetCurrData(startDataIndex, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var lowest = serieData.GetCurrData(2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var close = serieData.GetCurrData(startDataIndex + 1, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var heighest = serieData.GetCurrData(3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue); var lowest = serieData.GetCurrData(startDataIndex + 2, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue);
var isRise = yAxis.inverse ? close<open : close> open; var isRise = yAxis.inverse ? close<open : close> open;
var borderWidth = open == 0 ? 0f : var borderWidth = open == 0 ? 0f :
(itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth : (itemStyle.runtimeBorderWidth == 0 ? theme.serie.candlestickBorderWidth :

View File

@@ -1296,11 +1296,12 @@ namespace XCharts.Runtime
/// <param name="dataName"></param> /// <param name="dataName"></param>
/// <param name="dataId">the unique id of data</param> /// <param name="dataId">the unique id of data</param>
/// <returns></returns> /// <returns></returns>
public SerieData AddData(double open, double close, double lowest, double heighest, string dataName = null, string dataId = null) public SerieData AddData(double indexOrTimestamp, double open, double close, double lowest, double heighest, string dataName = null, string dataId = null)
{ {
CheckMaxCache(); CheckMaxCache();
var serieData = SerieDataPool.Get(); var serieData = SerieDataPool.Get();
serieData.data.Clear(); serieData.data.Clear();
serieData.data.Add(indexOrTimestamp);
serieData.data.Add(open); serieData.data.Add(open);
serieData.data.Add(close); serieData.data.Add(close);
serieData.data.Add(lowest); serieData.data.Add(lowest);
@@ -1309,7 +1310,7 @@ namespace XCharts.Runtime
serieData.index = m_Data.Count; serieData.index = m_Data.Count;
serieData.id = dataId; serieData.id = dataId;
AddSerieData(serieData); AddSerieData(serieData);
m_ShowDataDimension = 4; m_ShowDataDimension = 5;
SetVerticesDirty(); SetVerticesDirty();
CheckDataName(dataName); CheckDataName(dataName);
labelDirty = true; labelDirty = true;