winform LiveCharts2的使用--图表的使用

介绍
对于图标,需要使用到livechart2中的CartesianChart 控件,是一个“即用型”控件,用于使用笛卡尔坐标系创建绘图。需要将Series属性分配一组ICartesianSeries。

例如下面代码,创建一个最简单的图表:
cartesianChart1.Series = new ISeries[]
{new LineSeries<int>{Values = new int[] { 4, 6, 5, 3, -3, -1, 2 }},new ColumnSeries<double>{Values = new double[] { 2, 5, 4, -2, 4, -3, 5 }}
}; 
 

代码中new LineSeries<int>表示图上的曲线图,new ColumnSeries<double>表示图上的柱状图。通过对Values赋值,来构建每一个点。也有StepLineSeries,表示步线图:

一个图标由四部分组成,分别是Series(图形)、Axes(坐标轴)、Tooltip(提示信息)、Legend(图例),分别对应图上内容:

Series介绍
LineSeries

private LineSeries<ObservableValue> m_lineSeries { get; set; }
public ISeries[] Series { get; set; }private void cartesianChart1_Load(object sender, EventArgs e)
{m_lineSeries = new LineSeries<ObservableValue>(){Name = "直通率(%)",Values = new ObservableCollection<ObservableValue>(),DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top,  // 数值显示位置DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)),  // 设置显示在图形中的数值颜色LineSmoothness = 1,  // 设置曲线的平滑性, 0--1,由直到弯曲Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128)),  // 设置图形填充,折线的下部分进行填充};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_lineSeries];cartesianChart1.Series = Series;
} 
List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };
m_lineSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();
此处用于设置在图中描绘的点,表示的是Y轴对应的值
Series = [m_lineSeries];
cartesianChart1.Series = Series;
将series在图上绘制
属性:
|   Name  |   图例名称  | |
|   Values  |   图形对应的点值  | |
|   DataLabelsPosition  |   数值在图形中显示的位置  |   默认Top; DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top  | 
|   DataLabelsPaint  |   数值显示的颜色  |   DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45))  | 
|   DataLabelsFormatter  |   数值在图像上格式化显示  |   DataLabelsFormatter = value => (value.Coordinate.PrimaryValue / 100).ToString("P"), 以百分比形式显示  | 
|   LineSmoothness  |   设置曲线的平滑性  |   0--1,由直到弯曲  | 
|   Fill  |   设置图形填充,图形下部分进行填充颜色  |   Fill = new SolidColorPaint(new SKColor(20, 200, 200, 128)) null不填充  | 
|   ScalesYAt  |   数值对应哪一个Y轴显示(如果有多个Y轴)  | |
|   Stroke  |   显示图形的边框属性  | |
|   IsHoverable  |   鼠标悬停在图形点时,是否显示详细信息  |   默认true  | 
DataLabelsFormatter:
"N":数字格式(带千位分隔符)。
-  
- 示例:
1234.567.ToString("N2")→"1,234.57" 
 - 示例:
 
"F":定点数格式。
-  
- 示例:
1234.567.ToString("F2")→"1234.57" 
 - 示例:
 
"C":货币格式。
-  
- 示例:
1234.567.ToString("C2")→"$1,234.57"(取决于区域设置) 
 - 示例:
 
"P":百分比格式。
-  
- 示例:
0.567.ToString("P2")→"56.70%" 
 - 示例:
 
"E":科学计数法格式。
-  
- 示例:
1234.567.ToString("E2")→"1.23E+003" 
 - 示例:
 
"d":短日期格式。
-  
- 示例:
DateTime.Now.ToString("d")→"10/15/2023" 
 - 示例:
 
"D":长日期格式。
-  
- 示例:
DateTime.Now.ToString("D")→"Sunday, October 15, 2023" 
 - 示例:
 
"t":短时间格式。
-  
- 示例:
DateTime.Now.ToString("t")→"10:30 AM" 
 - 示例:
 
"T":长时间格式。
-  
- 示例:
DateTime.Now.ToString("T")→"10:30:45 AM" 
 - 示例:
 
"yyyy-MM-dd":自定义日期格式。
-  
- 示例:
DateTime.Now.ToString("yyyy-MM-dd")→"2023-10-15" 
 - 示例:
 
"0.00":强制显示两位小数。
-  
- 示例:
1234.5.ToString("0.00")→"1234.50" 
 - 示例:
 
"#,###":添加千位分隔符。
-  
- 示例:
1234567.ToString("#,###")→"1,234,567" 
 - 示例:
 
"0.##%":自定义百分比格式。
-  
- 示例:
0.567.ToString("0.##%")→"56.7%" 
 - 示例:
 
Stroke = new SolidColorPaint(new SKColor(0, 0, 0)){StrokeThickness = 2 }
new SKColor(0, 0, 0)设置边框的颜色
StrokeThickness设置绘制边框的粗细值
ColumnSeries
ColumnSeries 用于绘制柱状图,适合展示离散数据的对比。每个柱子代表一个数据点,柱子的高度由数据点的值决定。可以同时显示多个 ColumnSeries,用于比较不同类别的数据。

private ColumnSeries<ObservableValue> m_onepass_columnSeries { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{m_onepass_columnSeries = new ColumnSeries<ObservableValue>(){Name = "一次PASS",Values = new ObservableCollection<ObservableValue>(),ScalesYAt = 0,DataLabelsPosition = LiveChartsCore.Measure.DataLabelsPosition.Top,  // 数值显示位置DataLabelsPaint = new SolidColorPaint(new SKColor(45, 45, 45)),  // 设置显示在图形中的数值颜色IgnoresBarPosition = true,MaxBarWidth = 20,Stroke = null,};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_onepass_columnSeries.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_onepass_columnSeries];cartesianChart1.Series = Series;
} 
属性(有相同属性,不进行介绍):
|   Rx 和 Ry  |   设置柱子的圆角半径  |   Rx = 5;Ry = 5;  | 
|   MaxBarWidth  |   设置柱子的最大宽度  |   MaxBarWidth = 20  | 
|   IgnoresBarPosition  |   忽略位置显示,当有多个柱状图时,可以重叠显示  |   默认false  | 
StepLineSeries
阶梯线图 通过水平线和垂直线连接数据点,形成阶梯状的折线。每个数据点的值决定了阶梯的高度。适合展示离散数据的变化,尤其是数据点之间的变化是突变的场景。

private StepLineSeries<ObservableValue> m_time_stepline { get; set; }
private void cartesianChart1_Load(object sender, EventArgs e)
{m_time_stepline = new StepLineSeries<ObservableValue>(){Name = "time",Values = new ObservableCollection<ObservableValue>(),ScalesYAt = 0,};List<int> ints = new List<int>() { 1, 3, 2, 5, 6 };m_time_stepline.Values = ints.Select(value=>new ObservableValue(value)).ToList();Series = [m_time_stepline];cartesianChart1.Series = Series;
} 
属性(有相同属性,不进行介绍):
|   GeometryFill  |   数据点的填充颜色  |   GeometryFill = new SolidColorPaint(SKColors.Red);  | 
|   GeometryStroke  |   数据点的描边颜色  |   GeometryStroke = new SolidColorPaint(SKColors.Black);  | 
|   GeometrySize  |   数据点的大小  |   GeometrySize = 10;  | 
Axes介绍
Axes(坐标轴)用于定义数据的显示范围和刻度。可以配置为 X 轴、Y 轴,甚至是多轴(例如多个 Y 轴)。每个轴可以独立配置其外观、刻度、标签等属性。

// 定义X轴
cartesianChart1.XAxes = [new Axis{TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),  // 刻度线颜色TicksAtCenter = true,  // 是否位于中间MinStep = 1,SeparatorsPaint = new SolidColorPaint(new SKColor(200, 200, 200)),CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor(),CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed),CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1),Labeler = value => value.ToString("N3")}];
// 定义Y轴 这里定义了两个
cartesianChart1.YAxes = [new Axis{TicksPaint = new SolidColorPaint(new SKColor(35, 35, 35)),  // 刻度线颜色TicksAtCenter = true,  // 是否位于中间Position = LiveChartsCore.Measure.AxisPosition.Start,MinLimit = 0,},new Axis{Position = LiveChartsCore.Measure.AxisPosition.End,Labeler = (value) => (value/100).ToString("P"),MinLimit = 0,  // 最小范围}
]; 
XAxes 用于定义X轴属性
YAxes 用于定义Y轴属性
属性:
|   MinLimit MaxLimit  |   坐标轴的最小值和最大值。  | |
|   MinStep  |   刻度的最小步长  | |
|   TicksPaint  |   刻度线的颜色  |   TicksPaint = new SolidColorPaint(SKColors.Black)  | 
|   TicksAtCenter  |   刻度线是否位于坐标轴的中心  |   默认true  | 
|   SeparatorsPaint  |   分隔线的颜色  |   SeparatorsPaint = new SolidColorPaint(SKColors.Gray)  | 
|   ShowSeparatorLines  |   是否显示分隔线  |   默认true  | 
|   LabelsPaint  |   刻度标签的文字颜色  |   LabelsPaint = new SolidColorPaint(SKColors.Black)  | 
|   LabelsRotation  |   刻度标签的旋转角度  |   LabelsRotation = 45 旋转45°  | 
|   Labeler  |   自定义刻度标签的显示内容  |   Labeler = value => value.ToString("N2"); N2:显示两位小数  | 
|   CrosshairLabelsBackground  |   十字准线标签的背景颜色  |   CrosshairLabelsBackground = SKColors.DarkOrange.AsLvcColor()  | 
|   CrosshairLabelsPaint  |   十字准线标签的文字颜色  |   CrosshairLabelsPaint = new SolidColorPaint(SKColors.DarkRed)  | 
|   CrosshairPaint  |   十字准线的颜色和宽度  |   CrosshairPaint = new SolidColorPaint(SKColors.DarkOrange, 1)  | 
|   NamePaint  |   坐标轴标题的文字颜色  | |
|   Position  |   坐标轴的位置  |   Position = LiveChartsCore.Measure.AxisPosition.Start start:左侧或下侧 end:右侧或上侧  | 
cartesianChart
可以设置的属性:
|   ZoomMode  |   设置沿哪个轴可以拖动  | |
|   LegendPosition  |   Legend显示的位置  | |
|   LegendTextSize  |   Legend文本的大小  | |
|   Title  |   图表的标题  | 
cartesianChart1.Title = new LabelVisual
{Text = "chart",TextSize = 20,BackgroundColor = new LvcColor(20, 200, 200)
}; 
cartesianChart1.ZoomMode = LiveChartsCore.Measure.ZoomAndPanMode.X;  // 可以沿X轴拖动
cartesianChart1.LegendPosition = LiveChartsCore.Measure.LegendPosition.Bottom;  // 显示位置
cartesianChart1.LegendTextSize = 18;  // 文本大小
cartesianChart1.Dock = DockStyle.Fill;  // 布局 
中文乱码
如果在使用的过程中出现中文乱码,可以试试在Main中加入这行代码:
LiveCharts.Configure(config => config.HasGlobalSKTypeface(SKFontManager.Default.MatchCharacter('汉'))); 
