Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 亚洲综合色婷婷在线观看,日韩性生活视频,国产成人综合久久综合

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          BootstrapBlazor實(shí)戰(zhàn) Chart 圖表

          BootstrapBlazor實(shí)戰(zhàn) Chart 圖表使用(1)

          ootstrapBlazor組件 Chart 圖表介紹

          通過給定數(shù)據(jù),繪畫各種圖表的組件

          本文主要介紹三種圖表使用:折線圖,柱狀圖,餅圖



          1.新建工程

          新建工程b06chart,使用 nuget.org 進(jìn)行 BootstrapBlazor 組件安裝, Chart 庫,字體. 將項(xiàng)目添加到解決方案中

          dotnet new blazorserver -o b06chart
          dotnet add b06chart package BootstrapBlazor
          dotnet add b06chart package BootstrapBlazor.FontAwesome
          dotnet add b06chart package BootstrapBlazor.Chart
          dotnet sln add b06chart/b06chart.csproj

          2.樣式表和Javascript 引用

          增加主題樣式表到 Pages/_Layout.cshtml 文件中

          刪除 <link rel="stylesheet" href="css/bootstrap/bootstrap.min.css" />

          并在下面添加三行

          <link href="_content/BootstrapBlazor.FontAwesome/css/font-awesome.min.css" rel="stylesheet" />
          <link href="_content/BootstrapBlazor/css/bootstrap.blazor.bundle.min.css" rel="stylesheet" />
          <link href="_content/BootstrapBlazor.Chart/css/bootstrap.blazor.chart.bundle.min.css" rel="stylesheet" />

          添加 Javascript 引用到 Pages/_Layout.cshtml 文件中

          在 <script src="_framework/blazor.server.js"></script> 之前添加

          <script src="_content/BootstrapBlazor/js/bootstrap.blazor.bundle.min.js" asp-append-version="true"></script>
          <script src="_content/BootstrapBlazor.Chart/js/bootstrap.blazor.chart.bundle.min.js" asp-append-version="true"></script>

          3.添加增加命名空間引用到_Imports.razor文件中

          @using BootstrapBlazor.Components

          4.增加 BootstrapBlazorRoot 組件到 App.razor 文件中

          <BootstrapBlazorRoot>
              <Router AppAssembly="@typeof(App).Assembly">
                  ...
              </Router>
          </BootstrapBlazorRoot>

          5.添加BootstrapBlazor服務(wù)到Program.cs文件中

          在 builder.Services.AddSingleton<WeatherForecastService>(); 后加入

          builder.Services.AddBootstrapBlazor();

          6.組件參數(shù)

          參數(shù)

          說明

          可選值

          默認(rèn)值

          Width

          組件寬度支持單位 如: 100px 75%



          ChartType

          圖表類型

          Line/Bar/Pie/Doughnut/Bubble

          Line

          7.事件

          參數(shù)

          說明

          類型

          OnInitAsync

          組件數(shù)據(jù)初始化委托方法

          Func<Task>

          OnAfterInitAsync

          客戶端繪制圖表完畢后回調(diào)此委托方法

          Func

          OnAfterUpdateAsync

          客戶端更新圖表完畢后回調(diào)此委托方法

          Func<ChartAction, Task>

          8.為了快速建立隨機(jī)數(shù)據(jù),我們建立一個工具類UtilityChart.cs

          代碼來源于bb演示工程

          using BootstrapBlazor.Components;
          
          namespace b06chart;
          
          /// <summary>
          /// Chart 工具類
          /// </summary>
          internal static class UtilityChart
          {
              public static IEnumerable<string> Colors { get; }=new List<string>() { "Red", "Blue", "Green", "Orange", "Yellow", "Tomato", "Pink", "Violet" };
          
              /// <summary>
              /// 
              /// </summary>
              /// <param name="chart"></param>
              public static Task RandomData(Chart chart)=> chart.Update(ChartAction.Update);
          
              /// <summary>
              /// 
              /// </summary>
              /// <param name="chart"></param>
              /// <param name="dsCount"></param>
              public static void AddDataSet(Chart chart, ref int dsCount)
              {
                  if (dsCount < Colors.Count())
                  {
                      dsCount++;
                      _=chart.Update(ChartAction.AddDataset);
                  }
              }
          
              /// <summary>
              /// 
              /// </summary>
              /// <param name="chart"></param>
              /// <param name="dsCount"></param>
              public static void RemoveDataSet(Chart chart, ref int dsCount)
              {
                  if (dsCount > 1)
                  {
                      dsCount--;
                      _=chart.Update(ChartAction.RemoveDataset);
                  }
              }
          
              /// <summary>
              /// 
              /// </summary>
              /// <param name="chart"></param>
              /// <param name="daCount"></param>
              public static void AddData(Chart chart, ref int daCount)
              {
                  var limit=chart.ChartType switch
                  {
                      ChartType.Line=> 14,
                      ChartType.Bar=> 14,
                      ChartType.Bubble=> 14,
                      _=> Colors.Count()
                  };
          
                  if (daCount < limit)
                  {
                      daCount++;
                      _=chart.Update(ChartAction.AddData);
                  }
              }
          
              /// <summary>
              /// 
              /// </summary>
              /// <param name="chart"></param>
              /// <param name="daCount"></param>
              public static void RemoveData(Chart chart, ref int daCount)
              {
                  var limit=chart.ChartType switch
                  {
                      ChartType.Line=> 7,
                      ChartType.Bar=> 7,
                      ChartType.Bubble=> 4,
                      _=> 2
                  };
                  if (daCount > limit)
                  {
                      daCount--;
                      _=chart.Update(ChartAction.RemoveData);
                  }
              }
          }
          

          9.折線圖

          <p>折線圖</p>
          
          <Chart @ref="LineChart" OnInitAsync="()=> OnInit(0.4f, false)" Width="50%" />
          
          <button class="btn btn-primary" @onclick="e=> UtilityChart.RandomData(LineChart)"><i class="fa fa-line-chart"></i><span>隨機(jī)數(shù)據(jù)</span></button>
          
          @code{
              private Random Randomer { get; }=new Random();
              private int LineDatasetCount=2;
              private int LineDataCount=7;
          
              private Chart? LineChart { get; set; }
          
              private Task<ChartDataSource> OnInit(float tension, bool hasNull)
              {
                  var ds=new ChartDataSource();
                  ds.Options.Title="Line 折線圖";
                  ds.Options.X.Title="天數(shù)";
                  ds.Options.Y.Title="數(shù)值";
                  ds.Labels=Enumerable.Range(1, LineDataCount).Select(i=> i.ToString());
                  for (var index=0; index < LineDatasetCount; index++)
                  {
                      ds.Data.Add(new ChartDataset()
                      {
                          Tension=tension,
                          Label=$"數(shù)據(jù)集 {index}",
                          Data=Enumerable.Range(1, LineDataCount).Select((i, index)=> (index==2 && hasNull) ? null! : (object)Randomer.Next(20, 37))
                      });
                  }
                  return Task.FromResult(ds);
              }
          }
          

          10.柱狀圖

          <p>柱狀圖</p>
          
          <Chart ChartType="ChartType.Bar" OnInitAsync="()=> OnInit(false)" @ref="BarChart" Width="50%" />
          
          <button class="btn btn-primary" @onclick="e=> UtilityChart.RandomData(BarChart)"><i class="fa fa-bar-chart"></i><span>隨機(jī)數(shù)據(jù)</span></button>
          
          @code{
              private int BarDatasetCount=2;
              private int BarDataCount=7; 
           
              private Chart? BarChart { get; set; }
          
              private Task<ChartDataSource> OnInit(bool stacked)
              {
                  var ds=new ChartDataSource();
                  ds.Options.Title="Bar 柱狀圖";
                  ds.Options.X.Title="天數(shù)";
                  ds.Options.Y.Title="數(shù)值";
                  ds.Options.X.Stacked=stacked;
                  ds.Options.Y.Stacked=stacked;
                  ds.Labels=Enumerable.Range(1, BarDataCount).Select(i=> i.ToString());
                  for (var index=0; index < BarDatasetCount; index++)
                  {
                      ds.Data.Add(new ChartDataset()
                      {
                          Label=$"數(shù)據(jù)集 {index}",
                          Data=Enumerable.Range(1, BarDataCount).Select(i=> Randomer.Next(20, 37)).Cast<object>()
                      });
                  }
                  return Task.FromResult(ds);
              }
          }
          

          11.餅圖

          <p>餅圖</p>
          
          <Chart ChartType="ChartType.Pie" OnInitAsync="@OnInit" @ref="PieChart" Width="50%" />
          
          <button class="btn btn-primary" @onclick="e=> UtilityChart.RandomData(PieChart)"><i class="fa fa-pie-chart"></i><span>隨機(jī)數(shù)據(jù)</span></button>
          
          @code{
              private int PieDatasetCount=1;
              private int PieDataCount=5;
          
              private Chart? PieChart { get; set; }
          
              private Task<ChartDataSource> OnInit()
              {
                  var ds=new ChartDataSource();
                  ds.Options.Title="Pie 餅圖";
                  ds.Labels=UtilityChart.Colors.Take(PieDataCount);
                  for (var index=0; index < PieDatasetCount; index++)
                  {
                      ds.Data.Add(new ChartDataset()
                      {
                          Label=$"數(shù)據(jù)集 {index}",
                          Data=Enumerable.Range(1, PieDataCount).Select(i=> Randomer.Next(20, 37)).Cast<object>()
                      });
                  }
                  return Task.FromResult(ds);
              }
          }
          

          12.未完待續(xù) :)

          通過簡單的步驟,已經(jīng)可以初步體驗(yàn)圖表組件,由于近日事務(wù)較多,這篇只是初略的帶大家快速入門,體驗(yàn)一下BootstrapBlazor的Chart 圖表使用. 下一篇章我們將會對組件進(jìn)行一些調(diào)整,例如添加移除數(shù)據(jù)集,添加移除數(shù)據(jù),X軸Y軸數(shù)據(jù)改變后如何刷新組件,以及跟數(shù)據(jù)庫結(jié)合查詢生成圖表.

          項(xiàng)目源碼

          [Github] <https://github.com/densen2014/Blazor100>

          [Gitee] <https://gitee.com/densen2014/Blazor100>

          知識共享許可協(xié)議

          本作品采用 知識共享署名-非商業(yè)性使用-相同方式共享 4.0 國際許可協(xié)議 進(jìn)行許可。歡迎轉(zhuǎn)載、使用、重新發(fā)布,但務(wù)必保留文章署名AlexChow,不得用于商業(yè)目的,基于本文修改后的作品務(wù)必以相同的許可發(fā)布。如有任何疑問,請與我聯(lián)系 。

          AlexChow

          | 博客園 | 知乎 | Gitee | GitHub

          挑戰(zhàn)30天在頭條寫日記#

          快速上手

          獲取 Apache ECharts

          Apache ECharts 支持多種下載方式,可以在下一篇教程安裝中查看所有方式。這里,我們以從 jsDelivr CDN 上獲取為例,介紹如何快速安裝。

          在 https://www.jsdelivr.com/package/npm/echarts 選擇 dist/echarts.js,點(diǎn)擊并保存為 echarts.js 文件。

          引入 Apache ECharts

          在剛才保存 echarts.js 的目錄新建一個 index.html 文件,內(nèi)容如下:

          <!DOCTYPE html>
          <html>
            <head>
              <meta charset="utf-8" />
              <!-- 引入剛剛下載的 ECharts 文件 -->
              <script src="echarts.js"></script>
            </head>
          </html>

          打開這個 index.html,你會看到一片空白。但是不要擔(dān)心,打開控制臺確認(rèn)沒有報錯信息,就可以進(jìn)行下一步。

          繪制一個簡單的圖表

          在繪圖前我們需要為 ECharts 準(zhǔn)備一個定義了高寬的 DOM 容器。在剛才的例子 </head> 之后,添加:

          <body>
            <!-- 為 ECharts 準(zhǔn)備一個定義了寬高的 DOM -->
            <div id="main" style="width: 600px;height:400px;"></div>
          </body>

          然后就可以通過 echarts.init 方法初始化一個 echarts 實(shí)例并通過 setOption 方法生成一個簡單的柱狀圖,下面是完整代碼。

          <!DOCTYPE html>
          <html>
            <head>
              <meta charset="utf-8" />
              <title>ECharts</title>
              <!-- 引入剛剛下載的 ECharts 文件 -->
              <script src="echarts.js"></script>
            </head>
            <body>
              <!-- 為 ECharts 準(zhǔn)備一個定義了寬高的 DOM -->
              <div id="main" style="width: 600px;height:400px;"></div>
              <script type="text/javascript">
                // 基于準(zhǔn)備好的dom,初始化echarts實(shí)例
                var myChart=echarts.init(document.getElementById('main'));
          
                // 指定圖表的配置項(xiàng)和數(shù)據(jù)
                var option={
                  title: {
                    text: 'ECharts 入門示例'
                  },
                  tooltip: {},
                  legend: {
                    data: ['銷量']
                  },
                  xAxis: {
                    data: ['襯衫', '羊毛衫', '雪紡衫', '褲子', '高跟鞋', '襪子']
                  },
                  yAxis: {},
                  series: [
                    {
                      name: '銷量',
                      type: 'bar',
                      data: [5, 20, 36, 10, 10, 20]
                    }
                  ]
                };
          
                // 使用剛指定的配置項(xiàng)和數(shù)據(jù)顯示圖表。
                myChart.setOption(option);
              </script>
            </body>
          </html>

          這樣你的第一個圖表就誕生了!

          常用圖表類型

          • 柱狀圖:基礎(chǔ)柱狀圖,堆疊柱狀圖,動態(tài)排序柱狀圖,階梯瀑布圖

          • 折線圖:基礎(chǔ)折線圖,堆疊折線圖,區(qū)域面積圖,平滑曲線圖,階梯線圖

          • 餅圖:基礎(chǔ)餅圖,圓環(huán)圖南丁格爾圖(玫瑰圖)

          • 散點(diǎn)圖:基礎(chǔ)散點(diǎn)圖

          服務(wù)端渲染:



          數(shù)據(jù)處理


          項(xiàng)目地址:

          https://github.com/apache/echarts

          能:

          • modbus讀取數(shù)據(jù)
          • 數(shù)據(jù)寫入mysql數(shù)據(jù)庫中
          • 查詢設(shè)定時間段的數(shù)據(jù)
          • 數(shù)據(jù)顯示為曲線

          Node-RED界面:

          UI界面:

          mysql數(shù)據(jù)庫結(jié)構(gòu):

          資源地址:han-link.cn/4165.html

          #妙筆生花創(chuàng)作挑戰(zhàn)#


          主站蜘蛛池模板: 日韩a无吗一区二区三区| 极品少妇伦理一区二区| 久久久99精品一区二区| 色噜噜狠狠一区二区| 精品日本一区二区三区在线观看 | 一区二区三区亚洲视频| 中文字幕在线一区二区在线| 国产精品自在拍一区二区不卡| 精品国产亚洲一区二区三区在线观看| 久久久国产精品亚洲一区| 日韩一区二区久久久久久| 成人精品一区二区三区不卡免费看| 亚洲日韩国产一区二区三区| 视频在线观看一区二区三区| 无码人妻精品一区二区三区不卡| 国产自产对白一区| 中文字幕无线码一区2020青青| 亚洲国产精品第一区二区| 农村乱人伦一区二区| 亚洲国产一区在线| 精品人伦一区二区三区潘金莲| 精品一区二区三区波多野结衣| 肉色超薄丝袜脚交一区二区| 日韩精品无码一区二区中文字幕| 91亚洲一区二区在线观看不卡| 精品无码一区二区三区电影| 久久免费国产精品一区二区| 亚洲一区二区三区日本久久九| 无码人妻一区二区三区在线视频| 少妇无码一区二区三区| 中文字幕精品一区二区| 相泽南亚洲一区二区在线播放| 亚洲国产成人久久一区二区三区 | 国产一区二区三区在线免费| 性色av无码免费一区二区三区| 日本一区二区三区久久| 日本在线视频一区| 日本欧洲视频一区| 怡红院美国分院一区二区| 亚洲第一区精品观看| 日韩电影一区二区三区|