wpf使用Chart控件绘制线图
最近再项目中,突然用到了绘图的功能,虽然只是将用户数据简单的展示出来,但是介于之前从来没有用过wpf的原生控件绘图,所以就先再网上找了demo,尝试了一下,这里当作记录。
测试程序运行结果如下:
电脑上安装的是vs2019,没有在控件里面看到Chart,发现要添加两个引用
添加后,就可以开始wpf界面代码添加了,具体代码如下:
<Window x:Class="DrawingView.GraphView"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:wf="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms"xmlns:wfi ="clr-namespace:System.Windows.Forms.Integration;assembly=WindowsFormsIntegration"xmlns:Chr="clr-namespace:System.Windows.Forms.DataVisualization.Charting;assembly=System.Windows.Forms.DataVisualization"xmlns:local="clr-namespace:DrawingView"mc:Ignorable="d"Title="GraphView" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="40"/><RowDefinition Height="*"/></Grid.RowDefinitions><StackPanel Grid.Row="0" Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="20,0"><Button Content="初始化" x:Name="InitBtn" Click="InitBtn_Click" Width="80" Height="18" Margin="10,0"/><Button Content="开始" x:Name="StartBtn" Click="StartBtn_Click" Width="80" Height="18" Margin="10,0"/></StackPanel><Border Grid.Row="1" BorderThickness="2" BorderBrush="LightGray" Margin="10" CornerRadius="5"><wfi:WindowsFormsHost><Chr:Chart x:Name="chart1"/></wfi:WindowsFormsHost></Border></Grid>
</Window>
最主要的代码是这里,先添加两个引用,然后再xaml中添加一个容器,最后把chart控件放到容器中:
<wfi:WindowsFormsHost><Chr:Chart x:Name="chart1"/>
</wfi:WindowsFormsHost>
接下来看看后台代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Forms.DataVisualization.Charting;namespace DrawingView
{/// <summary>/// GraphView.xaml 的交互逻辑/// </summary>public partial class GraphView : Window{private Queue<double> dataQueue = new Queue<double>(100);private Queue<double> dataQueueSin = new Queue<double>(100);public GraphView(){InitializeComponent();}private void InitBtn_Click(object sender, RoutedEventArgs e){InitChart();}private void StartBtn_Click(object sender, RoutedEventArgs e){UpdateQueueValue();this.chart1.Series[0].Points.Clear();for (int i = 0; i < dataQueue.Count; i++){this.chart1.Series[0].Points.AddXY((i + 1), dataQueue.ElementAt(i));}this.chart1.Series[1].Points.Clear();for (int i = 0; i < dataQueueSin.Count; i++){this.chart1.Series[1].Points.AddXY((i + 1), dataQueueSin.ElementAt(i));}}private void UpdateQueueValue(){Random r = new Random();for (int i = 0; i < 100; i++){//对象添加到 System.Collections.Generic.Queue<T> 的结尾处。dataQueue.Enqueue(r.Next(0, 100));}int curValue = 0;for (int i = 0; i < 100; i++){curValue = curValue % 360;dataQueueSin.Enqueue(50 * Math.Sin(curValue * Math.PI / 180) + 50);curValue += 10;}}private void InitChart(){//定义图标区域this.chart1.ChartAreas.Clear();ChartArea chartArea1 = new ChartArea("C1");this.chart1.ChartAreas.Add(chartArea1);ChartArea chartArea2 = new ChartArea("C2");this.chart1.ChartAreas.Add(chartArea2);//定义储存和显示点的容器this.chart1.Series.Clear();Series series1 = new Series("S1");series1.ChartArea = "C1";this.chart1.Series.Add(series1);Series series2 = new Series("S2");series2.ChartArea = "C2";this.chart1.Series.Add(series2);//设置图标显示样式foreach(var item in this.chart1.ChartAreas){item.AxisX.Minimum = 0;item.AxisX.Maximum = 100;item.AxisX.Interval = 5;item.AxisX.MajorGrid.LineColor = System.Drawing.Color.Silver;item.AxisY.MajorGrid.LineColor = System.Drawing.Color.Silver;}//设置标题this.chart1.Titles.Clear();this.chart1.Titles.Add("S1");this.chart1.Titles[0].Text = "图形绘制展示";this.chart1.Titles[0].ForeColor = System.Drawing.Color.RoyalBlue;this.chart1.Titles[0].Font = new System.Drawing.Font("Microsoft Sans Serif", 12F);//设置图标显示样式this.chart1.Series[0].Color = System.Drawing.Color.Red;this.chart1.Series[1].Color = System.Drawing.Color.Red;this.chart1.Series[0].ChartType = SeriesChartType.Line;this.chart1.Series[1].ChartType = SeriesChartType.Spline;this.chart1.Series[0].Points.Clear();// 清除dataQueue中所有数据dataQueue.Clear();dataQueueSin.Clear();}}
}
dataQueue
和dataQueueSin
是用来存放绘图点的(y数据点),一个是随机数,一个是正/余弦波。在代码中,主要就是利用chart控件的集合属性画图,最主要的三个属性ChartAreas、Series、Legends,在这里我没有用到Legends,但是可以再我推荐的博客里面看到使用和详解。
- ChartAreas属性:ChartAreas可以理解为是一个图表的绘图区,图表控件并不限制你添加多少个绘图区域,你可以根据你的需要进行添加,对于每个绘图区域,都可以设置独立的属性,如:X,Y轴属性、背景等。但是他只开辟了一个可作图的空间,并不包含要作图的数据。
- Series属性:图表集合,就是最终看到的饼图、柱状图、线图、点图等构成数据的集合。每个Series属性,可以给他指定到特定的绘图区中。
- Legends属性:MSChart的图例默认不显示,可以通过属性配置实现展示。
chart控件的基本信息,可以参考下面这篇博客:
https://blog.csdn.net/qq_27825451/article/details/81305387
chart控件可以绘制的其他图形基本教程,可以参考下面这篇博客:
https://www.cnblogs.com/mazhenyu/p/9498439.html
然后还看了一篇总结:
https://blog.csdn.net/daisy0923/article/details/73325681
上面的这三个博客供参考,具体的还是要自己动手尝试才行。
wpf使用Chart控件绘制线图相关推荐
- C#chart控件绘制折线图、柱状图、饼图、雷达图
转载来源:https://blog.csdn.net/u011854789/article/details/82946553 参考链接: http://www.cnblogs.com/winshe/a ...
- C#:winform使用chart控件绘制折线图,时间轴可缩放
最近做的一个项目里用到这部分 打算记录下来 挖个坑 已填 Chart坐标轴横轴为时间,纵轴是数值 如果只是一次性绘图,那么遍历一遍数据即可 如果想连续绘制(比如按照时间更新绘制),就需要一个Timer ...
- C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展
一.需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 1.设置chart1的属性Legends中默认的Legend1的Enable为false: ...
- 使用.net 的Chart控件绘制曲线图
System.Windows.Forms.DataVisualization.Charting 命名空间 System.Windows.Forms.DataVisualization.Charting ...
- c#样条曲线命令_C# chart控件绘制曲线
标签: 在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using ...
- C#在chart控件中实现图上内插数据点功能
C#的chart控件可以轻松实现数据的查看,但是我们却没法轻易地对数据进行交互式编辑,所以前期我开发了chart控件数据点的框选.删除.平移功能,后来又开发了chart控件漫游功能.在我自己进行数据处 ...
- winform 使用chart控件画圆环图
1如果设置圆环上的颜色,不要按着Palette的来,可以自定义 可以通过设置PaletteCustomColors来进行自定义颜色 2.如何在圆环中加字,如下图所示 可以点击打Titles进行titl ...
- C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性
原文有备份,如有错误和需要改进的地方,请不吝指正会继续修改的 8个月没写博客了- -,一来是有不想继续干开发的想法,二来是赖的写,三来还是不想总结.所以为了继续坚持自己的开发和总结的信念,总结一下C# ...
- 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表试读版
一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年11月19日为止,目前已经更新了 149 篇,专栏完成度为 49.6%. 作者简介 Jerry ...
- C# Winform Chart控件用法6之雷达图
1.ChartAreas属性 ChartAreas属性指绘图区,一个控件可以有多个绘图区,比如我要在同一个控件内显示饼图和柱状图,肯定不能放在同一个ChartAreas区域内,应该在同一个Chart控 ...
最新文章
- 计算机主板的工作原理,计算机主板的工作原理.doc
- Java加密解密入门
- java 酒店系统_基于JAVA的酒店管理系统
- magento网站建设_外贸网站建设指南,告诉你建站系统怎么选择
- 【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)
- c语言之优先级 结合性与自增运算,C语言之优先级、结合性与自增运算
- World Wind Java开发之六——解析shape文件(转)
- 5.Docker之镜像的使用
- 关于Windows7下 IIS 7 对ASP.NET 的配置的一点感想
- win10使用import pcap 建议放弃,还是使用linux系统吧
- (十四)洞悉linux下的Netfilteriptables:开发一个match模块【实战】
- 流文件 服务器无响应,文件服务器配置程序未响应
- Apache Hive 下载与安装
- smobiler php对比,Smobiler的开发讲解
- 如何Diskgenius将U盘分区
- android 使用流量监控,android流量监控
- python学习-day9内置函数(高阶)
- android读取wlan信息,Android判断Wlan信号强弱及wlan管理信息
- 移动vue大转盘抽奖
- android 判断连接的网络是移动?联通?电信?
热门文章
- 五点菱形格式MATLAB,五点菱形格式-拉普拉斯第一边值问题-计算实习报告.docx
- Microsoft Word 2010 - 符号 / 特殊符号
- android Paddle 视频字幕识别TTS语音
- 单片机c语言轻松入门 pdf,单片机系统C语言轻松入门.pdf
- IE网页木马 - 使用 JS 实现打开网页后直接运行木马程序
- 利用ant自动从vss下载代码并编译到自动发布
- 《单片机原理与接口技术》期中测评
- 高等数学660---从214到221
- hzk16 8 16c语言示例,[资料共享]汉字库HZK16的使用,强烈推荐: 486959c6.rar
- 【高频电子线路】[模型]LC并联谐振回路(第2章 谐振功率放大器)