當前位置: 妍妍網 > 碼農

在Blazor中使用Chart.js快速建立圖表

2024-03-19碼農

前言

BlazorChartjs是一個在Blazor中使用Chart.js的庫(支持Blazor WebAssembly和Blazor Server兩種模式),它提供了簡單易用的元件來幫助開發者快速整合數據視覺化圖表到他們的 Blazor 應用程式中。本文我們將一起來學習一下在Blazor中使用Chart.js快速建立圖表。

Blazor是什麽?

Blazor是一種新興的Web應用程式框架,具有很大的潛力和發展前景。Blazor是在.NET和Razor上構建的使用者介面框架,它采用了最新的Web技術和.NET框架優勢,可以使用C# 程式語言編寫Web 應用程式,它不僅可以提高開發效率,還可以提供更好的使用者體驗和更好的可維護性。

詳細介紹可以看這篇文章:

建立Blazor WebAssembly套用

建立名為 ChartjsExercise 的Blazor WebAssembly套用:

安裝NuGet

安裝 PSC.Blazor.Components.Chartjs 包:

添加以下指令碼

開啟 index.html 檔,在頁面末尾添加以下指令碼:

<script src="_content/PSC.Blazor.Components.Chartjs/lib/Chart.js/chart.js"></script>
<script src="_content/PSC.Blazor.Components.Chartjs/Chart.js"type="module"></script>

引入元件

開啟你的 _Imports.razor 檔並添加以下內容:

@using PSC.Blazor.Components.Chartjs
@using PSC.Blazor.Components.Chartjs.Enums
@using PSC.Blazor.Components.Chartjs.Models
@using PSC.Blazor.Components.Chartjs.Models.Common
@using PSC.Blazor.Components.Chartjs.Models.Bar
@using PSC.Blazor.Components.Chartjs.Models.Bubble
@using PSC.Blazor.Components.Chartjs.Models.Doughnut
@using PSC.Blazor.Components.Chartjs.Models.Line
@using PSC.Blazor.Components.Chartjs.Models.Pie
@using PSC.Blazor.Components.Chartjs.Models.Polar
@using PSC.Blazor.Components.Chartjs.Models.Radar
@using PSC.Blazor.Components.Chartjs.Models.Scatter

柱狀圖

建立 BarSimple.razor 元件:

razor頁面程式碼

@page "/BarSimple"
@using ChartjsExercise.Model
<h3>柱狀圖</h3>
<Chart Config="_config" @ref="_chart" Height="500px"></Chart>
@code {
private BarChartConfig? _config;
private Chart? _chart;
protected override async Task OnInitializedAsync()
{
_config = new BarChartConfig()
{
Options = new Options()
{
Responsive = true,
MaintainAspectRatio = false,
Plugins = new Plugins()
{
Legend = new Legend()
{
Align = Align.Center,
Display = true,
Position = LegendPosition.Right
}
},
Scales = new Dictionary<string, Axis>()
{
{
Scales.XAxisId, new Axis()
{
Stacked = true,
Ticks = new Ticks()
{
MaxRotation = 0,
MinRotation = 0
}
}
},
{
Scales.YAxisId, new Axis()
{
Stacked = true
}
}
}
}
};
_config.Data.Labels = BarSimpleData.SimpleBarText;
_config.Data.Datasets.Add(new BarDataset()
{
Label = "Value",
Data = BarSimpleData.SimpleBar.Select(l => l.Value).ToList(),
BackgroundColor = Colors.Palette1,
BorderColor = Colors.PaletteBorder1,
BorderWidth = 1
});
}
}


BarSimpleData

public class BarSimpleData
{
public static List<string> SimpleBarText = new List<string>() { "一月""二月""三月""四月""五月""六月""七月" };
public static List<DataItem> SimpleBar = new List<DataItem>()
{
new DataItem() { Name = "一月", Value = 65 },
new DataItem() { Name = "二月", Value = 59 },
new DataItem() { Name = "三月", Value = 80 },
new DataItem() { Name = "四月", Value = 81 },
new DataItem() { Name = "五月", Value = 56 },
new DataItem() { Name = "六月", Value = 55 },
new DataItem() { Name = "七月", Value = 40 }
};
}

展示效果

餅圖

建立 PieSimple.razor 元件:

razor頁面程式碼

@page "/PieSimple"
@using ChartjsExercise.Model
<h3>餅圖</h3>
<Chart Config="_config" @ref="_chart" Height="500px"></Chart>
@code {
private PieChartConfig? _config;
private Chart? _chart;
protected override async Task OnInitializedAsync()
{
_config = new PieChartConfig()
{
Options = new PieOptions()
{
Responsive = true,
MaintainAspectRatio = false
}
};
_config.Data.Labels = PieSimpleData.SimplePieText;
_config.Data.Datasets.Add(new PieDataset()
{
Label = "數據集",
Data = PieSimpleData.SimplePie.ToList(),
BackgroundColor = Colors.PaletteBorder1,
HoverOffset = 4
});
}
}


PieSimpleData

public class PieSimpleData
{
public static List<string> SimplePieText = new List<string>() { "一月""二月""三月""四月" };
public static List<decimal?> SimplePie = new List<decimal?>() { 300, 50, 100, 20 };
}

展示效果

折線圖

建立 LineSimple.razor 元件:

razor頁面程式碼

@page "/LineSimple"
@using ChartjsExercise.Model
<h3>折線圖</h3>
<Chart Config="_config" @ref="_chart" Height="500px"></Chart>
@code {
private LineChartConfig? _config;
private Chart? _chart;
protected override async Task OnInitializedAsync()
{
_config = new LineChartConfig()
{
};
_config.Data.Labels = LineSimpleData.SimpleLineText;
_config.Data.Datasets.Add(new LineDataset()
{
Label = "數據集",
Data = LineSimpleData.SimpleLine.ToList(),
BorderColor = Colors.PaletteBorder1.FirstOrDefault(),
Tension = 0.1M,
Fill = false,
PointRadius = 15,
Point style = Point style.Cross
});
}
private void AddValue()
{
Random rd = new Random();
_chart.AddData(new List<string?>() { "August" }, 0, new List<decimal?>() { rd.Next(0, 200) });
}
}




LineSimpleData

public class LineSimpleData
{
public static List<string> SimpleLineText = new List<string>() { "一月""二月""三月""四月""五月""六月""七月" };
public static List<decimal?> SimpleLine = new List<decimal?>() { 65, 59, 80, 81, 86, 55, 40 };
public static List<decimal?> SimpleLine2 = new List<decimal?>() { 33, 25, 35, 51, 54, 76, 60 };
public static List<decimal?> SimpleLine3 = new List<decimal?>() { 53, 91, 39, 61, 39, 87, 23 };
}

展示效果

配置選單導航欄

在元件 NavMenu.razor 中配置:

<div class="top-row ps-3 navbar navbar-dark">
<div class="container-fluid">
<a class="navbar-brand" href="">ChartjsExercise</a>
<button title="Navigation menu" class="navbar-toggler" @onclick="ToggleNavMenu">
<span class="navbar-toggler-icon"></span>
</button>
</div>
</div>
<div class="@NavMenuCss class nav-scrollable" @onclick="ToggleNavMenu">
<nav class="flex-column">
<div class="nav-item px-3">
<NavLink class="nav-link" href="" Match="NavLinkMatch.All">
<span class="bi bi-house-door-fill-nav-menu" aria-hidden="true"></span> Home
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="BarSimple">
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>柱狀圖
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="PieSimple">
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>餅圖
</NavLink>
</div>
<div class="nav-item px-3">
<NavLink class="nav-link" href="LineSimple">
<span class="bi bi-plus-square-fill-nav-menu" aria-hidden="true"></span>折線圖
</NavLink>
</div>
</nav>
</div>
@code {
private bool collapseNavMenu = true;
private string? NavMenuCss class => collapseNavMenu ? "collapse" : null;
private void ToggleNavMenu()
{
collapseNavMenu = !collapseNavMenu;
}
}


更多圖表效果截圖

  • 更多圖表效果展示可以檢視官網範例地址:https://chartjs.puresourcecode.com/

  • 計畫源碼地址

    更多計畫實用功能和特性歡迎前往計畫開源地址檢視👀,別忘了給計畫一個Star支持💖。

    GitHub開源地址:https://github.com/erossini/BlazorChartjs

    ChartjsExercise文章範例:https://github.com/YSGStudyHards/DotNetExercises/tree/master/ChartjsExercise

    優秀計畫和框架精選

    該計畫已收錄到C#/.NET/.NET Core優秀計畫和框架精選中,關註優秀計畫和框架精選能讓你及時了解C#、.NET和.NET Core領域的最新動態和最佳實踐,提高開發工作效率和品質。坑已挖,歡迎大家踴躍送出PR推薦或自薦( 讓優秀的計畫和框架不被埋沒🤞 )。

    https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md


  • 學習是一個永無止境的過程,你知道的越多,你不知道的也會越多,在有限的時間內堅持每天多學一點,你一定能成為你想要成為的那個人。不積跬步無以至千裏,不積小流無以成江河!!!

    See you next good day