* UIBarChart:更改Y轴坐标刻度小数位自动计算

This commit is contained in:
Sunny 2020-10-28 20:29:28 +08:00
parent 451e990674
commit 4c2dcd55ff
7 changed files with 41 additions and 19 deletions

Binary file not shown.

Binary file not shown.

View File

@ -26,20 +26,20 @@ namespace Sunny.UI.Demo.Charts
var series = new UIBarSeries(); var series = new UIBarSeries();
series.Name = "Bar1"; series.Name = "Bar1";
series.AddData(11); series.AddData(1.1);
series.AddData(15); series.AddData(1.5);
series.AddData(12); series.AddData(1.2);
series.AddData(14); series.AddData(1.4);
series.AddData(13); series.AddData(1.3);
option.Series.Add(series); option.Series.Add(series);
series = new UIBarSeries(); series = new UIBarSeries();
series.Name = "Bar2"; series.Name = "Bar2";
series.AddData(-22); series.AddData(-2.2);
series.AddData(-28); series.AddData(-2.8);
series.AddData(-25); series.AddData(-2.5);
series.AddData(-23); series.AddData(-2.3);
series.AddData(-24); series.AddData(-2.4);
option.Series.Add(series); option.Series.Add(series);
option.XAxis.Data.Add("Mon"); option.XAxis.Data.Add("Mon");

View File

@ -47,24 +47,24 @@ namespace Sunny.UI.Demo
series.Name = "Bar1"; series.Name = "Bar1";
series.ShowBarName = true; series.ShowBarName = true;
series.ShowValue = true; series.ShowValue = true;
series.AddData("通道1", 11); series.AddData("通道1", 1.1);
series.AddData("通道2", 15); series.AddData("通道2", 1.5);
option.Series.Add(series); option.Series.Add(series);
series = new UIBarSeries(); series = new UIBarSeries();
series.Name = "Bar2"; series.Name = "Bar2";
series.ShowBarName = true; series.ShowBarName = true;
series.ShowValue = true; series.ShowValue = true;
series.AddData("通道1", 22); series.AddData("通道1", 2.2);
series.AddData("通道2", 28); series.AddData("通道2", 2.8);
series.AddData("通道3", 25); series.AddData("通道3", 2.5);
option.Series.Add(series); option.Series.Add(series);
series = new UIBarSeries(); series = new UIBarSeries();
series.Name = "Bar3"; series.Name = "Bar3";
series.ShowBarName = true; series.ShowBarName = true;
series.ShowValue = true; series.ShowValue = true;
series.AddData("通道1", 7); series.AddData("通道1", 0.7);
option.Series.Add(series); option.Series.Add(series);
option.XAxis.Data.Add("Mon"); option.XAxis.Data.Add("Mon");

View File

@ -53,7 +53,7 @@ namespace Sunny.UI
/// <param name="degree_end">刻度结束值,须乘以间隔使用</param> /// <param name="degree_end">刻度结束值,须乘以间隔使用</param>
/// <param name="degree_gap">刻度间隔</param> /// <param name="degree_gap">刻度间隔</param>
public void CalcDegreeScale(double start, double end, int expect_num, public void CalcDegreeScale(double start, double end, int expect_num,
out int degree_start, out int degree_end, out double degree_gap) out int degree_start, out int degree_end, out double degree_gap, out int decimalCount)
{ {
if (start >= end) if (start >= end)
{ {
@ -101,6 +101,10 @@ namespace Sunny.UI
} }
degree_end = end2; degree_end = end2;
_exponent = Math.Abs(_exponent);
if (fix_step.IsEven()) _exponent--;
if (_exponent < 0) _exponent = 0;
decimalCount = _exponent;
} }
protected override void CalcData() protected override void CalcData()
@ -142,11 +146,12 @@ namespace Sunny.UI
} }
CalcDegreeScale(min, max, Option.YAxis.SplitNumber, CalcDegreeScale(min, max, Option.YAxis.SplitNumber,
out int start, out int end, out double interval); out int start, out int end, out double interval, out int decimalCount);
YAxisStart = start; YAxisStart = start;
YAxisEnd = end; YAxisEnd = end;
YAxisInterval = interval; YAxisInterval = interval;
YAxisDecimalCount = decimalCount;
float x1 = DrawBarWidth / (Option.SeriesCount * 2 + Option.SeriesCount + 1); float x1 = DrawBarWidth / (Option.SeriesCount * 2 + Option.SeriesCount + 1);
float x2 = x1 * 2; float x2 = x1 * 2;
@ -250,6 +255,7 @@ namespace Sunny.UI
protected int YAxisStart; protected int YAxisStart;
protected int YAxisEnd; protected int YAxisEnd;
protected double YAxisInterval; protected double YAxisInterval;
protected int YAxisDecimalCount;
protected readonly ConcurrentDictionary<int, List<BarInfo>> Bars = new ConcurrentDictionary<int, List<BarInfo>>(); protected readonly ConcurrentDictionary<int, List<BarInfo>> Bars = new ConcurrentDictionary<int, List<BarInfo>>();
[DefaultValue(-1), Browsable(false)] [DefaultValue(-1), Browsable(false)]
@ -501,6 +507,10 @@ namespace Sunny.UI
float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart); float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart);
int idx = 0; int idx = 0;
float wmax = 0; float wmax = 0;
if (Option.YAxis.AxisLabel.AutoFormat)
Option.YAxis.AxisLabel.DecimalCount = YAxisDecimalCount;
for (int i = YAxisStart; i <= YAxisEnd; i++) for (int i = YAxisStart; i <= YAxisEnd; i++)
{ {
string label = Option.YAxis.AxisLabel.GetLabel(i * YAxisInterval, idx); string label = Option.YAxis.AxisLabel.GetLabel(i * YAxisInterval, idx);

View File

@ -74,11 +74,12 @@ namespace Sunny.UI
} }
CalcDegreeScale(min, max, Option.YAxis.SplitNumber, CalcDegreeScale(min, max, Option.YAxis.SplitNumber,
out int start, out int end, out double interval); out int start, out int end, out double interval, out int decimalCount);
YAxisStart = start; YAxisStart = start;
YAxisEnd = end; YAxisEnd = end;
YAxisInterval = interval; YAxisInterval = interval;
YAxisDecimalCount = decimalCount;
float barX = DrawOrigin.X; float barX = DrawOrigin.X;
if (Option.AutoSizeBars) if (Option.AutoSizeBars)
@ -460,6 +461,10 @@ namespace Sunny.UI
float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart); float DrawBarHeight = DrawSize.Height * 1.0f / (YAxisEnd - YAxisStart);
int idx = 0; int idx = 0;
float wmax = 0; float wmax = 0;
if (Option.YAxis.AxisLabel.AutoFormat)
Option.YAxis.AxisLabel.DecimalCount = YAxisDecimalCount;
for (int i = YAxisStart; i <= YAxisEnd; i++) for (int i = YAxisStart; i <= YAxisEnd; i++)
{ {
string label = Option.YAxis.AxisLabel.GetLabel(i * YAxisInterval, idx); string label = Option.YAxis.AxisLabel.GetLabel(i * YAxisInterval, idx);

View File

@ -177,6 +177,11 @@ namespace Sunny.UI
return value.ToString("F2"); return value.ToString("F2");
} }
public string GetAutoLabel(double value, int decimalCount)
{
return value.ToString("F" + decimalCount);
}
/// <summary> /// <summary>
/// 小数位个数Formatter不为空时以Formatter为准 /// 小数位个数Formatter不为空时以Formatter为准
/// </summary> /// </summary>
@ -186,6 +191,8 @@ namespace Sunny.UI
/// 日期格式化字符串Formatter不为空时以Formatter为准 /// 日期格式化字符串Formatter不为空时以Formatter为准
/// </summary> /// </summary>
public string DateTimeFormat { get; set; } = "HH:mm"; public string DateTimeFormat { get; set; } = "HH:mm";
public bool AutoFormat { get; set; } = true;
} }
public class UIAxisTick public class UIAxisTick