​ 最近再项目中,突然用到了绘图的功能,虽然只是将用户数据简单的展示出来,但是介于之前从来没有用过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();}}
}

dataQueuedataQueueSin是用来存放绘图点的(y数据点),一个是随机数,一个是正/余弦波。在代码中,主要就是利用chart控件的集合属性画图,最主要的三个属性ChartAreas、Series、Legends,在这里我没有用到Legends,但是可以再我推荐的博客里面看到使用和详解。

  1. ChartAreas属性:ChartAreas可以理解为是一个图表的绘图区,图表控件并不限制你添加多少个绘图区域,你可以根据你的需要进行添加,对于每个绘图区域,都可以设置独立的属性,如:X,Y轴属性、背景等。但是他只开辟了一个可作图的空间,并不包含要作图的数据。
  2. Series属性:图表集合,就是最终看到的饼图、柱状图、线图、点图等构成数据的集合。每个Series属性,可以给他指定到特定的绘图区中。
  3. 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控件绘制线图相关推荐

  1. C#chart控件绘制折线图、柱状图、饼图、雷达图

    转载来源:https://blog.csdn.net/u011854789/article/details/82946553 参考链接: http://www.cnblogs.com/winshe/a ...

  2. C#:winform使用chart控件绘制折线图,时间轴可缩放

    最近做的一个项目里用到这部分 打算记录下来 挖个坑 已填 Chart坐标轴横轴为时间,纵轴是数值 如果只是一次性绘图,那么遍历一遍数据即可 如果想连续绘制(比如按照时间更新绘制),就需要一个Timer ...

  3. C# WinForm开发系列之c# 通过.net自带的chart控件绘制饼图,柱形图和折线图的基础使用和扩展

    一.需要实现的目标是: 1.将数据绑定到pie的后台数据中,自动生成饼图. 2.生成的饼图有详细文字的说明. 1.设置chart1的属性Legends中默认的Legend1的Enable为false: ...

  4. 使用.net 的Chart控件绘制曲线图

    System.Windows.Forms.DataVisualization.Charting 命名空间 System.Windows.Forms.DataVisualization.Charting ...

  5. c#样条曲线命令_C# chart控件绘制曲线

    标签: 在.NET中以前经常用GDI去绘制,虽然效果也不错,自从.NET 4.0开始,专门为绘制图表而生的Chart控件出现了,有了它,就可以轻松的绘制你所需要的曲线图.柱状图什么的了. using ...

  6. C#在chart控件中实现图上内插数据点功能

    C#的chart控件可以轻松实现数据的查看,但是我们却没法轻易地对数据进行交互式编辑,所以前期我开发了chart控件数据点的框选.删除.平移功能,后来又开发了chart控件漫游功能.在我自己进行数据处 ...

  7. winform 使用chart控件画圆环图

    1如果设置圆环上的颜色,不要按着Palette的来,可以自定义 可以通过设置PaletteCustomColors来进行自定义颜色 2.如何在圆环中加字,如下图所示 可以点击打Titles进行titl ...

  8. C# Chart控件,chart、Series、ChartArea曲线图绘制的重要属性

    原文有备份,如有错误和需要改进的地方,请不吝指正会继续修改的 8个月没写博客了- -,一来是有不想继续干开发的想法,二来是赖的写,三来还是不想总结.所以为了继续坚持自己的开发和总结的信念,总结一下C# ...

  9. 使用 SAP UI5 Smart Chart 控件轻松绘制十数种不同类型的专业图表试读版

    一套适合 SAP UI5 初学者循序渐进的学习教程 本专栏计划的文章数在 300 篇左右,到 2022年11月19日为止,目前已经更新了 149 篇,专栏完成度为 49.6%. 作者简介 Jerry ...

  10. C# Winform Chart控件用法6之雷达图

    1.ChartAreas属性 ChartAreas属性指绘图区,一个控件可以有多个绘图区,比如我要在同一个控件内显示饼图和柱状图,肯定不能放在同一个ChartAreas区域内,应该在同一个Chart控 ...

最新文章

  1. 计算机主板的工作原理,计算机主板的工作原理.doc
  2. Java加密解密入门
  3. java 酒店系统_基于JAVA的酒店管理系统
  4. magento网站建设_外贸网站建设指南,告诉你建站系统怎么选择
  5. 【转】4.3SharePoint服务器端对象模型 之 使用CAML进行数据查询(Part 3)
  6. c语言之优先级 结合性与自增运算,C语言之优先级、结合性与自增运算
  7. World Wind Java开发之六——解析shape文件(转)
  8. 5.Docker之镜像的使用
  9. 关于Windows7下 IIS 7 对ASP.NET 的配置的一点感想
  10. win10使用import pcap 建议放弃,还是使用linux系统吧
  11. (十四)洞悉linux下的Netfilteriptables:开发一个match模块【实战】
  12. 流文件 服务器无响应,文件服务器配置程序未响应
  13. Apache Hive 下载与安装
  14. smobiler php对比,Smobiler的开发讲解
  15. 如何Diskgenius将U盘分区
  16. android 使用流量监控,android流量监控
  17. python学习-day9内置函数(高阶)
  18. android读取wlan信息,Android判断Wlan信号强弱及wlan管理信息
  19. 移动vue大转盘抽奖
  20. android 判断连接的网络是移动?联通?电信?

热门文章

  1. 五点菱形格式MATLAB,五点菱形格式-拉普拉斯第一边值问题-计算实习报告.docx
  2. Microsoft Word 2010 - 符号 / 特殊符号
  3. android Paddle 视频字幕识别TTS语音
  4. 单片机c语言轻松入门 pdf,单片机系统C语言轻松入门.pdf
  5. IE网页木马 - 使用 JS 实现打开网页后直接运行木马程序
  6. 利用ant自动从vss下载代码并编译到自动发布
  7. 《单片机原理与接口技术》期中测评
  8. 高等数学660---从214到221
  9. hzk16 8 16c语言示例,[资料共享]汉字库HZK16的使用,强烈推荐: 486959c6.rar
  10. 【高频电子线路】[模型]LC并联谐振回路(第2章 谐振功率放大器)