OxyPlot:一个功能强大、漂亮.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开源项目