首页 > 其他分享 >OxyPlot使用说明

OxyPlot使用说明

时间:2024-08-07 14:06:51浏览次数:14  
标签:OxyPlot Title Series plotModel 说明 Add 使用 var new

锁定Y轴的缩放和移动

在Axis坐标轴上设置IsZoomEnabled和IsPanEnabled为false。

var rightAxis = new LinearAxis
{
    Position = AxisPosition.Right,
    Title = "Right Y Axis",
    Key = "Right Y Axis",
    Minimum = -0.02,
    Maximum = 1,
    IsZoomEnabled = false,
    IsPanEnabled = false,
};

自适应显示的时候上下留一点空隙

不设置的时候,数据会紧贴着上下边缘,有时候看起来不是很美观。
设置MinimumPadding和MaximumPadding,值的范围为0-1,0为不留空隙,1为100%。类似下面的0.05,相当于原来的长度为100,则上下多出5%作为空隙。

var leftAxis = new LinearAxis
{
    Position = AxisPosition.Left,
    Title = "Left Y Axis",
    Key = "Left Y Axis",
    MinimumPadding = 0.05,
    MaximumPadding = 0.05,
};

OxyPlot文本注释

要在OxyPlot中实现这样的功能,你可以通过添加数据点或注释(Annotations)来在图表上标记特定的事件。

// 假设 plotModel 是你的 PlotModel 实例
var plotModel = new PlotModel();

// 创建一个 LineSeries 来显示遥测数据
var telemetrySeries = new LineSeries { Title = "Telemetry Data" };
plotModel.Series.Add(telemetrySeries);

// 创建一个 ScatterSeries 用来显示命令数据点
var commandSeries = new ScatterSeries { MarkerType = MarkerType.Circle, MarkerSize = 5, Color = OxyColors.Red };
plotModel.Series.Add(commandSeries);

// 假设这是你的遥测数据更新函数
void UpdateTelemetryData(double time, double value)
{
    telemetrySeries.Points.Add(new DataPoint(time, value));
}

// 当命令发生时调用此函数
void OnCommandReceived(double time, string commandInfo)
{
    // 添加一个数据点来表示命令发生的时刻
    commandSeries.Points.Add(new ScatterPoint(time, 0));

    // 添加一个文本注释
    var annotation = new TextAnnotation
    {
        Text = commandInfo,
        Position = new DataPoint(time, 0),
        HorizontalAlignment = HorizontalAlignment.Center,
        VerticalAlignment = VerticalAlignment.Bottom
    };
    plotModel.Annotations.Add(annotation);
}

Oxyplot双Y轴坐标系

左右各一个Y轴坐标轴,不同的曲线或散点等绑定不同的坐标轴。
下面的例子,曲线绑定左侧的Y轴,散点绑定右侧的Y轴。
需要注意的是,左右两侧的坐标轴都需要设置Key,并且需要取不同的名字。
曲线上采用YAxisKey = leftAxis.Key的方式进行绑定。

public class MainViewModel
{
    public PlotModel Model { get; private set; }

    public MainViewModel()
    {
        var plotModel = new PlotModel { Title = "Dual Y-Axis Chart" };

        // 准备一些数据
        double[] xData = { 1, 2, 3, 4, 5 };
        double[] yDataLeft = { 1, 4, 9, 16, 25 };
        double[] yDataRight = { 0.1, 0.4, 0.9, 1.6, 2.5 };

        // 创建左侧Y轴
        var leftAxis = new LinearAxis
        {
            Position = AxisPosition.Left,
            Title = "Left Y Axis",
            Key = "Left Y Axis"
        };
        plotModel.Axes.Add(leftAxis);

        // 创建右侧Y轴
        var rightAxis = new LinearAxis
        {
            Position = AxisPosition.Right,
            Title = "Right Y Axis",
            Key = "Right Y Axis",
            Minimum = -0.02,
            Maximum = 1
        };
        plotModel.Axes.Add(rightAxis);

        // 创建左侧的曲线图 Series
        var lineSeriesLeft = new LineSeries
        {
            Title = "Curve Left",
            MarkerType = MarkerType.None,
            Color = OxyColors.Blue,
            YAxisKey = leftAxis.Key
        };
        for (int i = 0; i < xData.Length; i++)
        {
            lineSeriesLeft.Points.Add(new DataPoint(xData[i], 10000 + yDataLeft[i]));
        }
        plotModel.Series.Add(lineSeriesLeft);

        // 创建右侧的曲线图 Series
        var scatterSeries = new ScatterSeries
        {
            Title = "Scatter",
            MarkerType = MarkerType.Circle,
            MarkerSize = 5,
            MarkerFill = OxyColors.Red,
            YAxisKey = rightAxis.Key
        };
        for (int i = 0; i < xData.Length; i++)
        {
            scatterSeries.Points.Add(new ScatterPoint(xData[i], 0));
        }
        plotModel.Series.Add(scatterSeries);

        //var lineSeriesRight = new LineSeries
        //{
        //    Title = "Curve Right",
        //    MarkerType = MarkerType.Diamond,
        //    Color = OxyColors.Red,
        //    YAxisKey = rightAxis.Key
        //};
        //for (int i = 0; i < xData.Length; i++)
        //{
        //    //lineSeriesRight.Points.Add(new DataPoint(xData[i], yDataRight[i]));
        //    lineSeriesRight.Points.Add(new DataPoint(xData[i], 0));
        //}
        //plotModel.Series.Add(lineSeriesRight);

        // 创建 X 轴
        var xAxis = new LinearAxis
        {
            Position = AxisPosition.Bottom,
            Title = "X Axis"
        };
        plotModel.Axes.Add(xAxis);

        Model = plotModel;
    }
}

Oxyplot同时显示曲线图和散点图

using OxyPlot;
using OxyPlot.Series;
using OxyPlot.Axes;

// 创建一个新的 PlotModel 实例
var plotModel = new PlotModel { Title = "Curve and Scatter Plot" };

// 准备一些数据
double[] xData = { 1, 2, 3, 4, 5 };
double[] yDataCurve = { 1, 4, 9, 16, 25 };
double[] yDataScatter = { 1.1, 4.2, 9.1, 16.3, 25.2 };

// 创建曲线图 Series
var lineSeries = new LineSeries
{
    Title = "Curve",
    MarkerType = MarkerType.None,
    Color = OxyColors.Blue
};
for (int i = 0; i < xData.Length; i++)
{
    lineSeries.Points.Add(new DataPoint(xData[i], yDataCurve[i]));
}
plotModel.Series.Add(lineSeries);

// 创建散点图 Series
var scatterSeries = new ScatterSeries
{
    Title = "Scatter",
    MarkerType = MarkerType.Circle,
    MarkerSize = 5,
    MarkerFill = OxyColors.Red
};
for (int i = 0; i < xData.Length; i++)
{
    scatterSeries.Points.Add(new ScatterPoint(xData[i], yDataScatter[i]));
}
plotModel.Series.Add(scatterSeries);

// 设置轴
plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Bottom, Title = "X Axis" });
plotModel.Axes.Add(new LinearAxis { Position = AxisPosition.Left, Title = "Y Axis" });

// 显示图形
var plotView = new OxyPlot.WindowsForms.PlotView();
plotView.Model = plotModel;
// 如果是在 WinForms 中使用,可以将 plotView 添加到 Form 中
// this.Controls.Add(plotView);

OxyPlot饼图

var modelP1 = new PlotModel { Title = "Pie Sample1" };

dynamic seriesP1 = new PieSeries { StrokeThickness = 2.0, InsideLabelPosition = 0.8, AngleSpan = 360, StartAngle = 0 };

seriesP1.Slices.Add(new PieSlice("Africa", 1030) { IsExploded = false, Fill = OxyColors.PaleVioletRed });
seriesP1.Slices.Add(new PieSlice("Americas", 929) { IsExploded = true });
seriesP1.Slices.Add(new PieSlice("Asia", 4157) { IsExploded = true });
seriesP1.Slices.Add(new PieSlice("Europe", 739) { IsExploded = true });
seriesP1.Slices.Add(new PieSlice("Oceania", 35) { IsExploded = true });

modelP1.Series.Add(seriesP1);

Model = modelP1;

OxyPlot.SkiaSharp.Wpf的使用

安装:

Install-Package OxyPlot.SkiaSharp.Wpf

命名空间引用:

xmlns:oxy="http://oxyplot.org/skiawpf"

XAML代码:

<oxy:PlotView
    Grid.Row="1"
    Grid.Column="1"
    Model="{Binding Model}" />

后台代码:

Model = new PlotModel { Title = "曲线图1", DefaultFont = "微软雅黑" };

其中DefaultFont用来指定默认字体,用来解决中文乱码的问题。

OxyPlot柱形图

var model = new PlotModel { };

var barSeries = new BarSeries
{
    ItemsSource = dict2.Select(s => new BarItem() { Value = s.Value }),
    LabelPlacement = LabelPlacement.Inside,
};
model.Series.Add(barSeries);

model.Axes.Add(new CategoryAxis
{
    Position = AxisPosition.Left,
    ItemsSource = dict2.Select(s => s.Key.ToString())
});

常用操作说明

image

标签:OxyPlot,Title,Series,plotModel,说明,Add,使用,var,new
From: https://www.cnblogs.com/wzwyc/p/18346926

相关文章

  • 【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧
    【Pyspark-驯化】一文搞懂Pyspark中的withColumnRenamed函数的使用技巧 本次修炼方法请往下查看......
  • 您知道Jmeter中Redirect Automatically 和 Follow Redirects的使用场景吗?
    相信很多使用过jmeter的同学都没有关注过请求中的RedirectAutomatically 和 FollowRedirects选项,如下图:在JMeter中,RedirectAutomatically 和 FollowRedirects 是与HTTP请求重定向相关的两个选项,它们之间是有很大区别的,本文就详细的说明二者的区别!RedirectAuto......
  • 程序设计部分 函数的递归 第4关:使用递归进行自动分析
    任务描述本关任务:计算逆波兰表达式的值。相关知识放苹果问题把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?注意:5,1,1和1,5,1是同一种分法。我们可以先假设有一个函数count(m,n)能告诉我们m个苹果放n个盘子有多少种放法,然后在此基础上进行......
  • 【RTT-Studio】详细使用教程十:TM1638驱动数码管
    文章目录一、简介二、TM1638地址组三、TM1638的两种数码管使用方式四、TM1638数据格式五、按键扫描和键扫复用六、完整代码一、简介TM1638是深圳市天微电子有限公司设计的一款带键盘扫描接口的LED(发光二极管显示器)驱动控制专用芯片,内部集成有MCU数字接口、数据锁存......
  • 使用Cisco进行模拟配置OSPF路由协议
    OSPF路由协议1.实验目的1)理解OSPF2)掌握OSPF的配置方法3)掌握查看OSPF的相关信息2.实验流程开始→布置拓扑→配置IP地址→配置OSPF路由并验证PC路由的连通性→查看路由器路由信息→查看路由协议配置与统计信息→查看OSPF进程及区域信息→查看路由器OSPF数......
  • 使用IText7和miniExcel处理pdf并输出内容
    使用框架:.net8.0、winform操作系统:windows11编译器:vs2022内容:使用iText7、miniExcel,介绍如何简单读取pdf文件文字内容,并做处理后输出至excel文件中秉承着一贯的风格,还是只讲操作,囫囵吞枣就是要讲究一个稳准狠......
  • 织梦DEDECMS列表页首页怎么跟其它页使用不同模板
    有些时候我们需要使列表页的首页跟第二页以及后面的页面的样式不同,修改dede:list标签又很难达到理想的效果,那么织梦猫就为大家介绍一个最简单的办法,就是为首页单独指定一个模板页,其余页面则调用另一个模板页。修改的办法如下:打开include目录下的arc.listview.class.php文件,找到D......
  • 不写代码,这样使用Python seaborn、matplotlib
    今天分享一个PyQt5GUI工具,动动鼠标拖拽就使用Python的Matplotlib、Seaborn进行绘图,并导出高清PDF。sviewgui安装pip install sviewguisviewgui使用使用很简单,因为,他只有一个方法啊:buildGUI();下面以tips.csv数据和boxplot为例介绍sviewgui的使用。以下三种方法均可......
  • JMeter使用
    实习过程中,使用到了JMeter测试工具,记录一下基本使用。JMeter是一个开源的负载测试工具,可以用来测试各种服务的性能,包括Web应用、数据库、FTP服务等。它的界面友好,功能强大,支持多种协议。本文将介绍如何使用JMeter进行性能测试。安装及使用访问ApacheJMeter官网下载最......
  • (五)time库的使用
    Python是一种功能强大的编程语言,其标准库中包含了丰富的模块和函数,用于处理时间和日期信息。其中,time模块提供了对时间的访问和处理功能,使得程序员可以轻松地操作时间数据。本篇博文将详细介绍time库的使用方法,包括基本介绍、时间获取方式、时间格式化和程序计时应用。1.time库......