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

推荐订阅源

J
Java Code Geeks
量子位
MongoDB | Blog
MongoDB | Blog
N
Netflix TechBlog - Medium
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
B
Blog
A
About on SuperTechFans
腾讯CDC
The GitHub Blog
The GitHub Blog
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
Last Week in AI
Last Week in AI
H
Help Net Security
WordPress大学
WordPress大学
博客园 - 司徒正美
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Hackread – Cybersecurity News, Data Breaches, AI and More
T
Tailwind CSS Blog
博客园 - 【当耐特】
S
SegmentFault 最新的问题
美团技术团队
M
MIT News - Artificial intelligence
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开源项目