<bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>

    使用ScottPlot庫在.NET WinForms中快速實現大型數據集的交互式顯示

    前言

    在.NET應用開發中數據集的交互式顯示是一個非常常見的功能,如需要創建折線圖、柱狀圖、餅圖、散點圖等不同類型的圖表將數據呈現出來,幫助人們更好地理解數據、發現規律,并支持決策和溝通。本文我們將一起來學習一下如何使用ScottPlot庫在.NET WinForms中快速實現大型數據集的交互式顯示。

    ScottPlot類庫介紹

    ScottPlot是一個免費、開源(采用MIT許可證)的強大.NET交互式繪圖庫,能夠輕松地實現大型數據集的交互式顯示。使用幾行代碼即可快速創建折線圖、柱狀圖、餅圖、散點圖等不同類型的圖表。

    ScottPlot類庫支持平臺和框架

    Console Application、WinForms、WPF、Avalonia、Blazor、WinUI等多個平臺和框架。

    ScottPlot類庫源代碼

    新建WinForms項目

    新建一個名為ScottPlotWinFormsExercise的項目。

    安裝ScottPlot.WinForms包

    搜索ScottPlot.WinForms包安裝:

    折線圖實現

    創建名為:LineChart窗體。

    FormsPlot (ScottPlot.WinForms)從工具箱拖到窗體中:

    輸入以下代碼:

        public partial class LineChart : Form
        {
            public LineChart()
            {
                double[] dataX = GetRandomNum(20).Distinct().OrderByDescending(x => x).ToArray();
                double[] dataY = GetRandomNum(19).Distinct().OrderByDescending(x => x).ToArray();
                formsPlot1.Plot.Add.Scatter(dataX, dataY);
                formsPlot1.Refresh();
            }

            public double[] GetRandomNum(int length)
            {
                double[] getDate = new double[length];
                Random random = new Random(); //創建一個Random實例
                for (int i = 0; i < length; i++)
                {
                    getDate[i] = random.Next(1, 100); //使用同一個Random實例生成隨機數
                }
                return getDate;
            }
        }

    運行效果展示:

    柱狀圖實現

    創建名為:BarChart窗體。

    FormsPlot (ScottPlot.WinForms)從工具箱拖到窗體中:

    輸入以下代碼:

        public partial class BarChart : Form
        {
            public BarChart()
            {
                double[] values = { 5, 10, 7, 13, 22, 18, 33, 16 };
                formsPlot1.Plot.Add.Bars(values);
                formsPlot1.Refresh();
            }
        }

    運行效果展示:

    餅圖實現

    創建名為:PieChart窗體。

    FormsPlot (ScottPlot.WinForms)從工具箱拖到窗體中:

    輸入以下代碼:

        public partial class PieChart : Form
        {
            public PieChart()
            {
                double[] values = { 3, 2, 8, 4, 8, 10 };
                formsPlot1.Plot.Add.Pie(values);
                formsPlot1.Refresh();
            }
        }

    運行效果展示:

    散點圖實現

    創建名為:ScatterChart窗體。

    FormsPlot (ScottPlot.WinForms)從工具箱拖到窗體中:

    輸入以下代碼:

        public partial class ScatterChart : Form
        {
            public ScatterChart()
            {
                //從原始數據開始
                double[] xs = Generate.Consecutive(100);
                double[] ys = Generate.NoisyExponential(100);

                //對數據進行對數縮放,并處理負值
                double[] logYs = ys.Select(Math.Log10).ToArray();

                //將對數縮放的數據添加到繪圖中
                var sp = formsPlot1.Plot.Add.Scatter(xs, logYs);
                sp.LineWidth = 0;

                //創建一個次要刻度生成器,用于放置對數分布的次要刻度
                ScottPlot.TickGenerators.LogMinorTickGenerator minorTickGen = new();

                //創建一個數值刻度生成器,使用自定義的次要刻度生成器
                ScottPlot.TickGenerators.NumericAutomatic tickGen = new();
                tickGen.MinorTickGenerator = minorTickGen;

                //創建一個自定義刻度格式化程序,用于設置每個刻度的標簽文本
                static string LogTickLabelFormatter(double y) => $"{Math.Pow(10, y):N0}";

                //告訴我們的主要刻度生成器僅顯示整數的主要刻度
                tickGen.IntegerTicksOnly = true;

                //告訴我們的自定義刻度生成器使用新的標簽格式化程序
                tickGen.LabelFormatter = LogTickLabelFormatter;

                //告訴左軸使用我們的自定義刻度生成器
                formsPlot1.Plot.Axes.Left.TickGenerator = tickGen;

                //顯示次要刻度的網格線
                var grid = formsPlot1.Plot.GetDefaultGrid();
                grid.MajorLineStyle.Color = Colors.Black.WithOpacity(.15);
                grid.MinorLineStyle.Color = Colors.Black.WithOpacity(.05);
                grid.MinorLineStyle.Width = 1;

                formsPlot1.Refresh();
            }
        }

    運行效果展示:

    項目演示入口

            private void Btn_ScatterChart_Click(object sender, EventArgs e)
            {
                ScatterChart formScatterChart = new ScatterChart();
                // 顯示目標窗體
                formScatterChart.Show();
            }

            private void Btn_PieChart_Click(object sender, EventArgs e)
            {
                PieChart formPieChart = new PieChart();
                // 顯示目標窗體
                formPieChart.Show();
            }

            private void Btn_BarChart_Click(object sender, EventArgs e)
            {
                BarChart formbarChart = new BarChart();
                // 顯示目標窗體
                formbarChart.Show();
            }

            private void Btn_LineChart_Click(object sender, EventArgs e)
            {
                LineChart formLineChart = new LineChart();
                // 顯示目標窗體
                formLineChart.Show();
            }

    項目源碼地址

    更多項目實用功能和特性歡迎前往項目開源地址查看??,別忘了給項目一個Star支持??。

    優秀項目和框架精選

    該項目已收錄到C#/.NET/.NET Core優秀項目和框架精選中,關注優秀項目和框架精選能讓你及時了解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和質量??右淹?,歡迎大家踴躍提交PR推薦或自薦(讓優秀的項目和框架不被埋沒??)。

    DotNetGuide技術社區交流群

    • DotNetGuide技術社區是一個面向.NET開發者的開源技術社區,旨在為開發者們提供全面的C#/.NET/.NET Core相關學習資料、技術分享和咨詢、項目推薦、招聘資訊和解決問題的平臺。
    • 在這個社區中,開發者們可以分享自己的技術文章、項目經驗、遇到的疑難技術問題以及解決方案,并且還有機會結識志同道合的開發者。
    • 我們致力于構建一個積極向上、和諧友善的.NET技術交流平臺,為廣大.NET開發者帶來更多的價值和成長機會。

    歡迎加入DotNetGuide技術社區微信交流群??

    posted @ 2024-03-14 08:30  追逐時光者  閱讀(1605)  評論(10編輯  收藏  舉報
    免费视频精品一区二区_日韩一区二区三区精品_aaa在线观看免费完整版_世界一级真人片
    <bdo id="4g88a"><xmp id="4g88a">
  • <legend id="4g88a"><code id="4g88a"></code></legend>