- 基础
- 步骤 1: 添加引用
- 步骤 2: 创建图表控件
- 步骤 3: 配置图表
- 步骤 4: 添加数据系列
- 步骤 5: 显示图表
- 一个简单的示例
- 注意事项
- 个人学习
- 首先
- 其次
- 目前用到的
- 判断某个 `Series` 是否存在
- 设置某个 `ChartAreas` 的XY轴坐标的范围
基础
在 C#
中使用图表通常涉及到以下几个步骤。这里以 Windows Forms
应用程序为例,使用 System.Windows.Forms.DataVisualization.Charting
命名空间来创建图表。
步骤 1: 添加引用
首先,确保你的项目中已经添加了 System.Windows.Forms.DataVisualization
的引用。这通常可以通过 NuGet
包管理器来完成。
步骤 2: 创建图表控件
在你的窗体上添加一个 Chart
控件。你可以在设计视图中拖拽,或者在代码中创建。
步骤 3: 配置图表
配置图表的基本属性,如标题、图例、轴标签等。
步骤 4: 添加数据系列
创建数据系列,并将数据绑定到图表上。
步骤 5: 显示图表
运行应用程序,查看图表的显示效果。
一个简单的示例
展示如何在 Windows Forms
应用程序中创建一个基本的折线图:
using System;
using System.Windows.Forms;
using System.Windows.Forms.DataVisualization.Charting;public class ChartDemoForm : Form
{private Chart chart1;public ChartDemoForm(){// 初始化组件InitializeComponent();// 初始化图表控件chart1 = new Chart();chart1.Dock = DockStyle.Fill;this.Controls.Add(chart1);// 设置图表标题chart1.Titles.Add("Sample Chart");// 创建图表区域ChartArea chartArea = new ChartArea("ChartArea1");chart1.ChartAreas.Add(chartArea);// 创建数据系列Series series = new Series("Series1");series.ChartType = SeriesChartType.Line; // 设置为折线图series.Points.DataBindY(new double[] { 1, 2, 3, 4, 5 }); // 绑定数据// 将数据系列添加到图表中chart1.Series.Add(series);}[STAThread]static void Main(){Application.EnableVisualStyles();Application.SetCompatibleTextRenderingDefault(false);Application.Run(new ChartDemoForm());}private void InitializeComponent(){// 这里可以添加窗体的初始化代码}
}
注意事项
- 在实际应用中,你可能需要从数据库、文件或其他数据源动态加载数据。
- 你可能需要添加更多的自定义设置,如轴的范围、网格线、颜色、图例位置等。
- 如果你使用的是
ASP.NET
或其他类型的应用程序,使用的方法和库可能会有所不同。 - 如果你有特定的使用场景或需要进一步的帮助,请提供更多的信息。
个人学习
首先
要知道ChartAreas
和 Series
的关系
- 一个
Chart
可以有多个图表区(ChartAreas
) - 一个
ChartAreas
可以有多个图表序列(Series
) - 一个
Series
就是你要显示的某一条线 - 我们为
Chart
添加Series
,然后为添加的Series
设定ChartAreas
如下代码所示
chart.ChartAreas.Clear();
chart.Series.Clear();
chart.ChartAreas.Add("Name");
chart.ChartAreas["Name"].Visible = true;
// 创建一个图标序列,并设置其显示为曲线
var series = new Series(name) { ChartType = SeriesChartType.Spline };
其次
要有一个观念
Chart
是一个图,我们通过不断创建新的图去覆盖老图达到动态效果
Task.Run(async () => {while(flag) {await Task.Delay(20); //每20ms更新一下//DoSomething}
});
上述代码为异步更新 Chart
,个人不想使用 Timer
series.Points.Clear();
series.Points.AddXY(ListX, ListY);
chart.Invalidate();
上述代码为先清空某个 Series
的所有点,然后重新写点,然后更新整个 Chart
目前用到的
判断某个 Series
是否存在
!chart.Series.Any(s => s.Name == Name)
设置某个 ChartAreas
的XY轴坐标的范围
double range = maxValue - minValue;
chart.ChartAreas[series.Name].AxisY.Minimum = minValue - (range * 0.5) - 0.01;
chart.ChartAreas[series.Name].AxisY.Maximum = maxValue + (range * 0.5) + 0.01;
上述代码为 Y
值的。
通过数据动态算出 maxValue
和 minValue
然后修改 Axis@
的 Minimum
和 Maximum
属性(通过 range
增加上下余量)使得图像一直在中间