diff --git a/Scripts/UI/BarChart.cs b/Scripts/UI/BarChart.cs index 9a965cde..edc317d2 100644 --- a/Scripts/UI/BarChart.cs +++ b/Scripts/UI/BarChart.cs @@ -33,7 +33,7 @@ namespace XCharts { var stackSeries = m_Series.GetStackSeries(); int seriesCount = stackSeries.Count; - float scaleWid = m_YAxis.GetDataWidth(coordinateHig,m_DataZoom); + float scaleWid = m_YAxis.GetDataWidth(coordinateHig, m_DataZoom); float barWid = m_Bar.barWidth > 1 ? m_Bar.barWidth : scaleWid * m_Bar.barWidth; float offset = m_Bar.inSameBar ? (scaleWid - barWid - m_Bar.space * (seriesCount - 1)) / 2 : @@ -61,7 +61,8 @@ namespace XCharts float pX = seriesCurrHig[i] + zeroX + m_Coordinate.tickness; float pY = coordinateY + i * scaleWid; if (!m_YAxis.boundaryGap) pY -= scaleWid / 2; - float barHig = value / (maxValue - minValue) * coordinateWid; + float barHig = (minValue > 0 ? value - minValue : value) + / (maxValue - minValue) * coordinateWid; float space = m_Bar.inSameBar ? offset : offset + j * (barWid + m_Bar.space); seriesCurrHig[i] += barHig; @@ -141,7 +142,8 @@ namespace XCharts float pX = zeroX + i * scaleWid; if (!m_XAxis.boundaryGap) pX -= scaleWid / 2; float pY = seriesCurrHig[i] + zeroY + m_Coordinate.tickness; - float barHig = value / (maxValue - minValue) * coordinateHig; + float barHig = (minValue > 0 ? value - minValue : value) + / (maxValue - minValue) * coordinateHig; seriesCurrHig[i] += barHig; float space = m_Bar.inSameBar ? offset : offset + j * (barWid + m_Bar.space); diff --git a/Scripts/UI/Internal/CoordinateChart.cs b/Scripts/UI/Internal/CoordinateChart.cs index ec89771f..dbb28605 100644 --- a/Scripts/UI/Internal/CoordinateChart.cs +++ b/Scripts/UI/Internal/CoordinateChart.cs @@ -376,58 +376,39 @@ namespace XCharts { m_Series.GetMinMaxValue(m_DataZoom, out tempMinValue, out tempMaxValue); } - if (m_XAxis.type == Axis.AxisType.Value) + Axis axis; + if (m_XAxis.type == Axis.AxisType.Value) axis = m_XAxis; + else axis = m_YAxis; + switch (axis.minMaxType) { - switch (m_XAxis.minMaxType) - { - case Axis.AxisMinMaxType.Default: - if (tempMinValue > 0 && tempMaxValue > 0) - { - tempMinValue = 0; - tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); - } - else if (tempMinValue < 0 && tempMaxValue < 0) - { - tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); - tempMaxValue = 0; - } - break; - case Axis.AxisMinMaxType.MinMax: + case Axis.AxisMinMaxType.Default: + if (tempMinValue > 0 && tempMaxValue > 0) + { + tempMinValue = 0; + tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); + } + else if (tempMinValue < 0 && tempMaxValue < 0) + { + tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); + tempMaxValue = 0; + } + else + { tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); - break; - case Axis.AxisMinMaxType.Custom: - if (m_XAxis.min != 0) tempMinValue = m_XAxis.min; - if (m_XAxis.max != 0) tempMaxValue = m_XAxis.max; - break; - } - } - else if (m_YAxis.type == Axis.AxisType.Value) - { - switch (m_YAxis.minMaxType) - { - case Axis.AxisMinMaxType.Default: - if (tempMinValue > 0 && tempMaxValue > 0) - { - tempMinValue = 0; - tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); - } - else if (tempMinValue < 0 && tempMaxValue < 0) - { - tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); - tempMaxValue = 0; - } - break; - case Axis.AxisMinMaxType.MinMax: - tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); - tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); - break; - case Axis.AxisMinMaxType.Custom: - if (m_YAxis.min != 0) tempMinValue = m_YAxis.min; - if (m_YAxis.max != 0) tempMaxValue = m_YAxis.max; - break; - } - + } + break; + case Axis.AxisMinMaxType.MinMax: + tempMinValue = ChartHelper.GetMinDivisibleValue(tempMinValue); + tempMaxValue = ChartHelper.GetMaxDivisibleValue(tempMaxValue); + break; + case Axis.AxisMinMaxType.Custom: + if (axis.min != 0 || axis.max != 0) + { + tempMinValue = axis.min; + tempMaxValue = axis.max; + } + break; } if (tempMinValue != minValue || tempMaxValue != maxValue) { @@ -436,12 +417,14 @@ namespace XCharts if (m_XAxis.type == Axis.AxisType.Value) { m_ZeroXOffset = minValue > 0 ? 0 : + maxValue < 0 ? coordinateWid : Mathf.Abs(minValue) * (coordinateWid / (Mathf.Abs(minValue) + Mathf.Abs(maxValue))); OnXMaxValueChanged(); } else if (m_YAxis.type == Axis.AxisType.Value) { m_ZeroYOffset = minValue > 0 ? 0 : + maxValue < 0 ? coordinateHig : Mathf.Abs(minValue) * (coordinateHig / (Mathf.Abs(minValue) + Mathf.Abs(maxValue))); OnYMaxValueChanged(); } @@ -468,6 +451,8 @@ namespace XCharts protected override void OnSizeChanged() { base.OnSizeChanged(); + minValue = 0; + maxValue = 100; InitSplitX(); InitSplitY(); } diff --git a/Scripts/UI/LineChart.cs b/Scripts/UI/LineChart.cs index d0205e2c..d19c6c42 100644 --- a/Scripts/UI/LineChart.cs +++ b/Scripts/UI/LineChart.cs @@ -90,9 +90,8 @@ namespace XCharts } float value = serieData[i]; float pX = startX + i * scaleWid; - float pY = seriesCurrHig[i] + zeroY + m_Coordinate.tickness; - float dataHig = value / (maxValue - minValue) * coordinateHig; - + float pY = seriesCurrHig[i] + coordinateY + m_Coordinate.tickness; + float dataHig = (value - minValue) / (maxValue - minValue) * coordinateHig; np = new Vector3(pX, pY + dataHig); if (i > 0) @@ -329,8 +328,8 @@ namespace XCharts } float value = serie.data[i]; float pY = startY + i * scaleWid; - float pX = seriesCurrHig[i] + zeroX + m_Coordinate.tickness; - float dataHig = value / (maxValue - minValue) * coordinateWid; + float pX = seriesCurrHig[i] + coordinateX + m_Coordinate.tickness; + float dataHig = (value - minValue) / (maxValue - minValue) * coordinateWid; np = new Vector3(pX + dataHig, pY); if (i > 0)