修复Candlesticks效果不对的问题 (#313)

This commit is contained in:
monitor1394
2024-04-12 08:30:34 +08:00
parent 42079848dc
commit a361e191da
5 changed files with 56 additions and 26 deletions

View File

@@ -73,6 +73,7 @@ slug: /changelog
## master
* (2024.04.12) 修复`Candlesticks`效果不对的问题 (#313)
* (2024.03.20) 增加`Tooltip``triggerOn`设置触发条件
* (2024.03.19) 修复`Pie`在设置`ItemStyle``opacity`时颜色不对的问题 (#309)

View File

@@ -17,13 +17,17 @@ namespace XCharts.Runtime
{
var serie = chart.AddSerie<Candlestick>(serieName);
var defaultDataCount = 5;
for (int i = 0; i < defaultDataCount; i++)
var lastValue = 50d;
for (int i = 0; i < 5; i++)
{
var open = Random.Range(20, 60);
var close = Random.Range(40, 90);
var lowest = Random.Range(0, 50);
var heighest = Random.Range(50, 100);
var open = lastValue;
var close = open + Random.Range(-20, 20);
var min = open < close ? open : close;
var max = open > close ? open : close;
var lowest = min + Random.Range(-10, -10);
var heighest = max + Random.Range(10, 10);
chart.AddData(serie.index, i, open, close, lowest, heighest);
lastValue = close;
}
return serie;
}

View File

@@ -124,7 +124,7 @@ namespace XCharts.Runtime
var close = serieData.GetCurrData(startDataIndex + 1, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var lowest = serieData.GetCurrData(startDataIndex + 2, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var heighest = serieData.GetCurrData(startDataIndex + 3, dataAddDuration, dataChangeDuration, yAxis.inverse, yMinValue, yMaxValue, unscaledTime);
var isRise = yAxis.inverse ? close<open : close> open;
var isRise = yAxis.inverse ? close < open : close > open;
var borderWidth = open == 0 ? 0f :
(itemStyle.borderWidth == 0 ? theme.serie.candlestickBorderWidth :
itemStyle.borderWidth);
@@ -138,18 +138,30 @@ namespace XCharts.Runtime
var minCut = (yMinValue > 0 ? yMinValue : 0);
if (valueTotal != 0)
{
barHig = (float) ((close - open) / valueTotal * grid.context.height);
pY += (float) ((open - minCut) / valueTotal * grid.context.height);
barHig = (float)((close - open) / valueTotal * grid.context.height);
pY += (float)((open - minCut) / valueTotal * grid.context.height);
}
serieData.context.stackHeight = barHig;
float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top;
plb = new Vector3(pX + gap + borderWidth, pY + borderWidth);
plt = new Vector3(pX + gap + borderWidth, pY + currHig - borderWidth);
prt = new Vector3(pX + gap + barWidth - borderWidth, pY + currHig - borderWidth);
prb = new Vector3(pX + gap + barWidth - borderWidth, pY + borderWidth);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig - borderWidth);
var offset = 2 * borderWidth;
if (isRise)
{
plb = new Vector3(pX + gap + offset, pY + offset);
plt = new Vector3(pX + gap + offset, pY + currHig - offset);
prt = new Vector3(pX + gap + barWidth - offset, pY + currHig - offset);
prb = new Vector3(pX + gap + barWidth - offset, pY + offset);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig - offset);
}
else
{
plb = new Vector3(pX + gap + offset, pY - offset);
plt = new Vector3(pX + gap + offset, pY + currHig + offset);
prt = new Vector3(pX + gap + barWidth - offset, pY + currHig + offset);
prb = new Vector3(pX + gap + barWidth - offset, pY - offset);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig + offset);
}
if (serie.clip)
{
plb = chart.ClampInGrid(grid, plb);
@@ -169,8 +181,8 @@ namespace XCharts.Runtime
var itemWidth = Mathf.Abs(prt.x - plb.x);
var itemHeight = Mathf.Abs(plt.y - prb.y);
var center = new Vector3((plb.x + prt.x) / 2, (plt.y + prb.y) / 2);
var lowPos = new Vector3(center.x, zeroY + (float) ((lowest - minCut) / valueTotal * grid.context.height));
var heighPos = new Vector3(center.x, zeroY + (float) ((heighest - minCut) / valueTotal * grid.context.height));
var lowPos = new Vector3(center.x, zeroY + (float)((lowest - minCut) / valueTotal * grid.context.height));
var heighPos = new Vector3(center.x, zeroY + (float)((heighest - minCut) / valueTotal * grid.context.height));
var openCenterPos = new Vector3(center.x, prb.y);
var closeCenterPos = new Vector3(center.x, prt.y);
if (intensive)

View File

@@ -17,16 +17,17 @@ namespace XCharts.Runtime
public static Serie AddDefaultSerie(BaseChart chart, string serieName)
{
var serie = chart.AddSerie<SimplifiedCandlestick>(serieName);
var lastValue = 50d;
for (int i = 0; i < 50; i++)
{
lastValue += UnityEngine.Random.Range(-10, 20);
var open = lastValue + Random.Range(-10, 5);
var close = lastValue + Random.Range(-5, 10);
var lowest = lastValue + Random.Range(-15, -10);
var heighest = lastValue + Random.Range(10, 20);
var open = lastValue;
var close = open + Random.Range(-20, 20);
var min = open < close ? open : close;
var max = open > close ? open : close;
var lowest = min + Random.Range(-10, -10);
var heighest = max + Random.Range(10, 10);
chart.AddData(serie.index, i, open, close, lowest, heighest);
lastValue = close;
}
return serie;
}

View File

@@ -144,11 +144,23 @@ namespace XCharts.Runtime
float currHig = AnimationStyleHelper.CheckDataAnimation(chart, serie, i, barHig);
Vector3 plb, plt, prt, prb, top;
plb = new Vector3(pX + gap + borderWidth, pY + borderWidth);
plt = new Vector3(pX + gap + borderWidth, pY + currHig - borderWidth);
prt = new Vector3(pX + gap + barWidth - borderWidth, pY + currHig - borderWidth);
prb = new Vector3(pX + gap + barWidth - borderWidth, pY + borderWidth);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig - borderWidth);
var offset = 2 * borderWidth;
if (isRise)
{
plb = new Vector3(pX + gap + offset, pY + offset);
plt = new Vector3(pX + gap + offset, pY + currHig - offset);
prt = new Vector3(pX + gap + barWidth - offset, pY + currHig - offset);
prb = new Vector3(pX + gap + barWidth - offset, pY + offset);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig - offset);
}
else
{
plb = new Vector3(pX + gap + offset, pY - offset);
plt = new Vector3(pX + gap + offset, pY + currHig + offset);
prt = new Vector3(pX + gap + barWidth - offset, pY + currHig + offset);
prb = new Vector3(pX + gap + barWidth - offset, pY - offset);
top = new Vector3(pX + gap + barWidth / 2, pY + currHig + offset);
}
// if (serie.clip)
// {
// plb = chart.ClampInGrid(grid, plb);