首页 > 其他分享 >WPF中使用OxyPlot动态绘制曲线图

WPF中使用OxyPlot动态绘制曲线图

时间:2024-01-05 14:34:10浏览次数:21  
标签:OxyPlot false 曲线图 Axes DynamicCurve using new WPF

安装Nuget包:

Install-Package OxyPlot.Wpf

XAML代码:

<Window
    x:Class="OxyPlotDemo.MainWindow"
    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:local="clr-namespace:OxyPlotDemo"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:oxy="http://oxyplot.org/wpf"
    Title="MainWindow"
    Width="800"
    Height="450"
    mc:Ignorable="d">
    <Window.DataContext>
        <local:MainViewModel />
    </Window.DataContext>
    <Grid>
        <oxy:PlotView Model="{Binding DynamicCurve}" />
    </Grid>
</Window>

后台代码:

using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Series;
using System.Diagnostics;
using System.Windows.Threading;

namespace OxyPlotDemo;

public class MainViewModel
{
    private PerformanceCounter cpuCounter;

    public MainViewModel()
    {
        cpuCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total");

        this.DynamicCurve = new PlotModel { Title = "Example 1" };
        OxyPlot.Axes.LinearAxis bottomAxis = new OxyPlot.Axes.LinearAxis()
        {
            Position = AxisPosition.Bottom,
            //IsAxisVisible = false,//X轴不显示
            //Title = "X轴",//显示标题内容
            //TitlePosition = 1,//显示标题位置
            //TitleColor = OxyColor.Parse("#d3d3d3"),//显示标题位置
            IsZoomEnabled = false,//坐标轴缩放关闭
            IsPanEnabled = false,//图表缩放功能关闭
            MajorGridlineStyle = LineStyle.Solid,
            MinorGridlineStyle = LineStyle.Dot,
        };
        //定义y轴
        OxyPlot.Axes.LinearAxis leftAxis = new OxyPlot.Axes.LinearAxis()
        {
            Position = AxisPosition.Left,
            Minimum = 0,
            Maximum = 100,
            //Title = "Y轴",//显示标题内容
            //TitlePosition = 1,//显示标题位置
            //TitleColor = OxyColor.Parse("#d3d3d3"),//显示标题位置
            IsZoomEnabled = false,//坐标轴缩放关闭
            IsPanEnabled = false,//图表缩放功能关闭
            MajorGridlineStyle = LineStyle.Solid,
            MinorGridlineStyle = LineStyle.Dot,
        };
        DynamicCurve.Axes.Add(bottomAxis);
        DynamicCurve.Axes.Add(leftAxis);
        series = new LineSeries()
        {
            Color = OxyColors.Green,
            StrokeThickness = 2,
            //MarkerSize = 3,
            //MarkerStroke = OxyColors.DarkGreen,
            //MarkerType = MarkerType.Diamond,
            Title = "Temp"
        };
        this.DynamicCurve.Series.Add(series);

        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = TimeSpan.FromMilliseconds(10);
        timer.Tick += (s, e) =>
        {
            double cpuUsage = cpuCounter.NextValue();

            series.Points.Add(new DataPoint(index++, cpuUsage));
        };
        timer.Start();

        DispatcherTimer timer2 = new DispatcherTimer();
        timer2.Interval = TimeSpan.FromMilliseconds(100);
        timer2.Tick += (s, e) =>
        {
            DynamicCurve.InvalidatePlot(true);
        };
        timer2.Start();
    }

    public PlotModel DynamicCurve { get; private set; }

    private LineSeries series;
    private int index;
}

测试了一下动态曲线图的效率情况。因为是获取CPU的使用率,所以值的动态还是比较大的。加到1万个点左右的时候,貌似界面已经有点卡顿了。

标签:OxyPlot,false,曲线图,Axes,DynamicCurve,using,new,WPF
From: https://www.cnblogs.com/wzwyc/p/17947206

相关文章

  • 【愚公系列】2024年01月 WPF控件专题 Label、TextBox、PasswordBox控件介绍
    ......
  • Blazor 混合开发_MAUI+Vue_WPF+Vue
    Blazor混合开发_MAUI+Vue_WPF+Vue背景混合开发的核心为什么必须使用wwwroot文件夹放置Web项目文件创建MAUI项目创建wwwroot文件夹服务注册创建_import.razor添加Main.razor组件修改MainPage.xaml文件创建WPF项目创建wwwroot文件夹服务注册创建_import.razor添......
  • WPF基本布局代码
    <Windowx:Class="WpfApp2.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.c......
  • WPF自定义控件之ItemsControl鱼眼效果
    原理先获取鼠标在控件中的坐标,在获取其每一项相对于ItemsControl的坐标,然后计算每一项离当前鼠标的距离,在根据这个距离,对其每一项进行适当的缩放实现创建一个类,命名为FishEyeItemsControl publicclassFishEyeItemsControl:ItemsControl 添加应用鱼眼效果方法(控制其控件......
  • WPF中bind使用
    1、例TextBox的text关联类的属性1.1、类的创建classTestViewMode:INotifyPropertyChanged{publiceventPropertyChangedEventHandlerPropertyChanged;protectedvoidOnPropertyChanged(stringpropertyName){PropertyC......
  • XWPFTemplate填充word模版内容
    <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.5.0</version></dependency>importcom.deepoove.poi.XWPFTemplate;importcom.deepoove.poi.data.PictureRenderData;i......
  • Wpf 通过数据注解(特性)校验表单+Prism8+IDataErrorInfo
    十年河东,十年河西,莫欺少年穷学无止境,精益求精参考:WPF表单验证摘要WPF表单验证是WPF重要基础设施之一,依靠MVVM的数据绑定机制及微软的有力封装,使得我们在处理实体表单验证等可以快捷高效的灵活处理。常见的表单验证实现大概有Exception 、ValidationRule 、IDataErrorInfo ,......
  • WPF 使用Log4Net记录日志和显示日志
    一、添加引用 二、添加Log4Net配置文件,设置文件属性如果较新则复制或者始终复制 <?xmlversion="1.0"encoding="utf-8"?><log4net><!--将日志以回滚文件的形式写到文件中--><!--按日期切分日志文件,并将日期作为日志文件的名字--><appendername="Lo......
  • 浅谈WPF之ToolTip工具提示
    在日常应用中,当鼠标放置在某些控件上时,都会有相应的信息提示,从软件易用性上来说,这是一个非常友好的功能设计。那在WPF中,如何进行控件信息提示呢?这就是本文需要介绍的ToolTip【工具提示】内容,本文以一些简单的小例子,简述如何在WPF开发中,应用工具提示,仅供学习分享使用,如有不足之处,还......
  • WPF中实现页面跳转
    `WPF中实现页面跳转WPF是WindowsPresentationFoundation的缩写,是微软推出的一种用于创建桌面应用程序的技术。WPF中有一个重要的概念就是页面(Page),它可以让我们在一个窗口(Window)中显示不同的内容,实现类似于网页浏览器的效果。页面跳转就是指从一个页面切换到另一个页面的过程。......