惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

量子位
Stack Overflow Blog
Stack Overflow Blog
人人都是产品经理
人人都是产品经理
The GitHub Blog
The GitHub Blog
Engineering at Meta
Engineering at Meta
Vercel News
Vercel News
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
The Cloudflare Blog
Last Week in AI
Last Week in AI
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
T
Tailwind CSS Blog
V
Visual Studio Blog
博客园 - 三生石上(FineUI控件)
小众软件
小众软件
Google DeepMind News
Google DeepMind News
D
DataBreaches.Net
博客园 - 司徒正美
B
Blog RSS Feed
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
L
LangChain Blog

博客园 - chingho

OpenClaw 不会安装的,一键安装包来了,代码开源! Windows下安装 Ollama + OpenClaw + 飞书,实现真正本地部署! 微软新利器!winapp CLI:一键打包、调试、集成 Windows 原生能力 告别代码!我用Trae氛围编程的方式,开发了一款公众号文章同步插件! C#实现Stdio通信方式的MCP Server C#实现SSE通信方式的MCP Server C#实现MCP Client 与 LLM 连接,抓取网页内容功能! VS Code + Cline + 魔搭MCP Server 实现抓取网页内容。 C#实现自己的MCP Client 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了! Phi小模型开发教程:C#使用本地模型Phi视觉模型分析图像,实现图片分类、搜索等功能 Phi小模型开发教程:用C#开发本地部署AI聊天工具,只需CPU,不需要GPU,3G内存就可以运行,不输GPT-3.5 websocket-sharp:.NET平台上的WebSocket客户端与服务器开源库 Eval-Expression.NET:动态执行C#脚本,类似Javascript的Eval函数功能 BotSharp:又一个.Net重磅AI开源项目,.Net在AI领域开始崛起! DateTimeExtensions:一个轻量C#的开源DateTime扩展方法库 Bogus:.NET的假数据生成利器 Coravel:一个可轻松实现任务调度、队列、邮件发送的开源项目 .Net程序员机会来了,微软官方新推出一个面向Windows开发者本地运行AI模型的开源工具
OxyPlot:一个功能强大、漂亮.Net跨平台开源绘图库
chingho · 2025-01-16 · via 博客园 - chingho

推荐一个支持多平台、多框架的.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开源项目