首页 > 其他分享 >OxyPlot:一个功能强大、漂亮.Net跨平台开源绘图库

OxyPlot:一个功能强大、漂亮.Net跨平台开源绘图库

时间:2025-01-16 10:12:53浏览次数:1  
标签:OxyPlot 开源 跨平台 var new model Net

推荐一个支持多平台、多框架的.Net绘图库。

01 项目简介

OxyPlot是一个基于.NET开发的、跨平台的绘图库,可用于多种平台和框架,如WPF、Windows 8、Windows Phone、Windows Phone Silverlight、Windows Forms、Silverlight、GTK#、Xwt、Xamarin.iOS、Xamarin.Android、Xamarin.Forms和Xamarin.Mac等。它提供了丰富的绘图功能,可以用于创建各种类型的图表,如折线图、柱状图、饼图、散点图等。

02 使用方法

1、安装依赖库

Install-Package OxyPlot.Core

Install-Package OxyPlot.Core.Drawing

2、示例代码

using OxyPlot;
using OxyPlot.Axes;
using OxyPlot.Core.Drawing;
using OxyPlot.Series;

class Program
{
    static void Main(string[] args)
    {
        var outputToFile = "test-oxyplot-static-export-file.png";
        var outputExportStreamOOP = "test-oxyplot-ExportToStream.png";
        var outputExportFileOOP = "test-oxyplot-ExportToFile.png";

        var width = 1024;
        var height = 768;
        var background = OxyColors.LightGray;
        var resolution = 96d;

        var model = BuildPlotModel();

        // 使用静态方法导出到文件
        PngExporter.Export(model, outputToFile, width, height, resolution);

        // 使用实例方法导出
        using (var stream = new MemoryStream())
        {
            var pngExporter = new PngExporter { Width = width, Height = height, Resolution = resolution };
            pngExporter.Export(model, stream);
            System.IO.File.WriteAllBytes(outputExportStreamOOP, stream.ToArray());
        }

        var pngExporter2 = new PngExporter { Width = width, Height = height, Resolution = resolution };
        var bitmap = pngExporter2.ExportToBitmap(model);
        bitmap.Save(outputExportFileOOP, System.Drawing.Imaging.ImageFormat.Png);
        bitmap.Save(Path.ChangeExtension(outputExportFileOOP, ".gif"), System.Drawing.Imaging.ImageFormat.Gif);
    }

    private static IPlotModel BuildPlotModel()
    {
        var rand = new Random(21);

        var model = new PlotModel { Title = "蛋糕类型受欢迎程度" };

        var cakePopularity = Enumerable.Range(1, 5).Select(i => rand.NextDouble()).ToArray();
        var sum = cakePopularity.Sum();
        var barItems = cakePopularity.Select(cp => RandomBarItem(cp, sum)).ToArray();
        var barSeries = new BarSeries
        {
            ItemsSource = barItems,
            LabelPlacement = LabelPlacement.Base,
            LabelFormatString = "{0:.00}%"
        };

        model.Series.Add(barSeries);

        model.Axes.Add(new CategoryAxis
        {
            Position = AxisPosition.Left,
            Key = "CakeAxis",
            ItemsSource = new[]
            {
                    "Apple cake",
                    "Baumkuchen",
                    "Bundt Cake",
                    "Chocolate cake",
                    "Carrot cake"
                }
        });
        return model;
    }

    private static BarItem RandomBarItem(double cp, double sum)
       => new BarItem { Value = cp / sum * 100, Color = RandomColor() };

    private static OxyColor RandomColor()
    {
        var r = new Random();
        return OxyColor.FromRgb((byte)r.Next(255), (byte)r.Next(255), (byte)r.Next(255));
    }
}

3、效果

图片

03 部分绘图效果

1、折线图

图片

2、柱状图

图片

3、热图

图片

4、饼图

图片

5、三角函数

图片

04 项目地址

https://github.com/oxyplot/oxyplot

更多开源项目: https://github.com/bianchenglequ/NetCodeTop

- End -

推荐阅读

DLL依赖关系查看工具:7个热门.Net开源项目!

Translumo:基于.NET开发的开源的屏幕实时翻译工具

推荐一个Star 1.3K报表.Net开源项目

MKL.NET:为.NET开发者提供高性能数学计算支持的开源库

基于.Net Core开发的GraphQL开源项目

标签:OxyPlot,开源,跨平台,var,new,model,Net
From: https://www.cnblogs.com/chingho/p/18673835

相关文章

  • rinetd-端口转发工具
    工具介绍Rinetd是为在一个Unix和Linux操作系统中为重定向传输控制协议(TCP)连接的一个工具。Rinetd是单一过程的服务器,它处理任何数量的连接到在配置文件etc/rinetd中指定的地址/端口对。尽管rinetd使用非闭锁I/O运行作为一个单一过程,它可能重定向很多连接而不对这台机器增加额外......
  • (翻译) 关于游戏网络,每个游戏程序需知 What Every Programmer Needs To Know About
    原文链接 https://gafferongames.com/post/what_every_programmer_needs_to_know_about_game_networking/ Haveyoueverwonderedhowmultiplayergameswork?Fromtheoutsideitseemsmagical:twoormoreplayerssharingaconsistentexperience(一致的体验)across......
  • 【进阶教程】轻量级开源VNC本地安装与跨平台远程桌面实战分享——“cpolar内网穿透”
    文章目录前言1.安装TightVNC服务端2.局域网VNC远程测试3.Win安装Cpolar工具4.配置VNC远程地址5.VNC远程桌面连接6.固定VNC远程地址7.固定VNC地址测试前言在工作和生活中,我们经常需要跨越地理界限进行协作或处理事务。这时,远程桌面服务就成了不可或缺的好帮手......
  • MSGNet:多尺度序列间相关性学习的多变量时间序列预测
    MSGNet——多尺度序列间相关性学习的多变量时间序列预测[2401.00423v1]MSGNet:LearningMulti-ScaleInter-SeriesCorrelationsforMultivariateTimeSeriesForecasting——来自CCF-A(AAAI,AAAlConferenceonArtificialIntelligence)GitHub代码:YoZhibo/MSGNet:MS......
  • 深入理解Kubernetes Pod生命周期
    目录前言:1.Pod概述2.Pod生命周期的各个阶段2.1Pending(待定)2.2Running(运行中)2.3Succeeded(成功)2.4Failed(失败)2.5Unknown(未知)3.Pod状态的转变4.Pod的重启策略5.Pod的终止过程6.容器的管理与生命周期6.1容器的生命周期6.2健康检查与容器管理6.3......
  • Kubernetes 知识梳理及集群搭建
    Kubernetes介绍应用部署方式演变在部署应用程序的方式上,主要经历了三个时代:传统部署:互联网早期,会直接将应用程序部署在物理机上优点:简单,不需要其它技术的参与缺点:不能为应用程序定义资源使用边界,很难合理地分配计算资源,而且程序之间容易产生影响虚拟化部署:可以在一台......
  • 在 .NET 应用中配置 <identity impersonate="true"> 的作用及应用场景
    在ASP.NET应用程序的web.config文件中,设置 <identityimpersonate="true"/> 是一个重要的安全和权限管理配置项。它主要用来启用身份模拟(Impersonation),这是一种允许ASP.NET应用程序在执行某些操作时以客户端的身份运行而不是默认的应用程序池身份的功能。一、什么是身份......
  • 如何在 ASP.NET Core 中实现速率限制?
    在ASP.NETCore中实现速率限制(RateLimiting)中间件可以帮助你控制客户端对API的请求频率,防止滥用和过载。速率限制通常用于保护服务器资源,确保服务的稳定性和可用性。ASP.NETCore本身并没有内置的速率限制中间件,但你可以通过自定义中间件或使用第三方库来实现速率限制。以......
  • PoE(Power over Ethernet)
    PoE(PoweroverEthernet)是一种通过网线同时传输电力和数据的技术。它允许网络设备(如IP电话、无线接入点、IP摄像头等)通过以太网电缆获取电力,而无需单独的电源线12。PoE有几个标准:IEEE802.3af:也称为标准PoE,提供最高15.4W的电力。IEEE802.3at:也称为PoE+,提供最高25.5W的电力。I......
  • .NET 数据拷贝方案选择
     应用中我们经常使用到数据的复制,在.NET中有多种方式可以实现复制数据或对象。选择哪种方式、是浅拷贝还是深拷贝,具体需求场景可以取决于对象的复杂性、数据量等,本文我们介绍主要的拷贝方式以及相对高性能的方案。 1.MemberwiseClone拷贝浅拷贝 Object.MemberwiseClone方法......