--- lang: ja-jp breaks: true --- # `Plotly.NET` のサンプル 2023-02-21 https://plotly.com/csharp/ ## Hello from C# ```xml= <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <PackageReference Include="Plotly.NET" Version="3.0.1" /> <PackageReference Include="Plotly.NET.CSharp" Version="0.8.0" /> </ItemGroup> ``` ```csharp= using Plotly.NET.CSharp; ``` ```csharp= Chart.Point<double, double, string>( x: new double[] { 1, 2 }, y: new double[] { 5, 10 } ) .WithTraceInfo("Hello from C#", ShowLegend: true) .WithXAxisStyle<double, double, string>(Title: Plotly.NET.Title.init("xAxis")) .WithYAxisStyle<double, double, string>(Title: Plotly.NET.Title.init("yAxis")) .SaveHtml(@"..\..\..\html\001_Hello_from_C#.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/xFqy8bi.png) ## Basic Bar Chart ```csharp= var animals = new[] { "giraffes", "orangutans", "monkeys" }; var sfValues = new[] { 20, 14, 23 }; Chart.Column<int, string, string>(sfValues, animals) .SaveHtml(@"..\..\..\html\002_Basic_Bar_Chart.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/DntTmzy.png) ## Grouped Bar Chart ```csharp= var animals = new[] { "giraffes", "orangutans", "monkeys" }; var sfValues = new[] { 20, 14, 23 }; var laValues = new[] { 12, 18, 29 }; Chart.Combine(new[] { Chart.Column<int, string, string>(sfValues, animals ,"SF Zoo"), Chart.Column<int, string, string>(laValues, animals , "LA Zoo") }) .SaveHtml(@"..\..\..\html\003_Grouped_Bar_Chart.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/ZcrCPzL.png) ## Stacked Bar Chart ```csharp= var animals = new[] { "giraffes", "orangutans", "monkeys" }; var sfValues = new[] { 20, 14, 23 }; var laValues = new[] { 12, 18, 29 }; Chart.Combine(new[] { Chart.StackedColumn<int, string, string>(sfValues, animals, "SF Zoo"), Chart.StackedColumn<int, string, string>(laValues, animals, "LA Zoo"), }) .SaveHtml(@"..\..\..\html\004_Stacked_Bar_Chart.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/hzQwb1C.png) ## Creating Figures using DynamicObject ```csharp= using Microsoft.FSharp.Collections; using Plotly.NET; using Plotly.NET.LayoutObjects; ``` ```csharp= LinearAxis xAxis = new LinearAxis(); xAxis.SetValue("title", "xAxis"); xAxis.SetValue("zerolinecolor", "#ffff"); xAxis.SetValue("gridcolor", "#ffff"); xAxis.SetValue("showline", true); xAxis.SetValue("zerolinewidth", 2); LinearAxis yAxis = new LinearAxis(); yAxis.SetValue("title", "yAxis"); yAxis.SetValue("zerolinecolor", "#ffff"); yAxis.SetValue("gridcolor", "#ffff"); yAxis.SetValue("showline", true); yAxis.SetValue("zerolinewidth", 2); Layout layout = new(); layout.SetValue("xaxis", xAxis); layout.SetValue("yaxis", yAxis); layout.SetValue("title", "A Figure Specified by DynamicObj"); layout.SetValue("plot_bgcolor", "#e5ecf6"); layout.SetValue("showlegend", true); Trace trace = new("bar"); trace.SetValue("x", new[] { 1, 2, 3 }); trace.SetValue("y", new[] { 1, 3, 2 }); var fig = GenericChart.Figure.create(ListModule.OfSeq(new[] { trace }), layout); GenericChart.fromFigure(fig) .SaveHtml(@"..\..\..\html\005_Creating_Figures_using_DynamicObject.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/Rl9DKb9.png) ## Figures as GenericChart Objects ```csharp= using Plotly.NET; using Plotly.NET.LayoutObjects; ``` ```csharp= var xAxis = LinearAxis.init<IConvertible, IConvertible, IConvertible, IConvertible, IConvertible, IConvertible>( Title: Title.init("xAxis"), ZeroLineColor: Color.fromString("#ffff"), GridColor: Color.fromString("#ffff"), ZeroLineWidth: 2); var yAxis = LinearAxis.init<IConvertible, IConvertible, IConvertible, IConvertible, IConvertible, IConvertible>( Title: Title.init("yAxis"), ZeroLineColor: Color.fromString("#ffff"), GridColor: Color.fromString("#ffff"), ZeroLineWidth: 2); var layout = Layout.init<IConvertible>(Title: Title.init("A Plotly.NET Chart"), PlotBGColor: Color.fromString("#e5ecf6")); Plotly.NET.CSharp.Chart.Column<int, int, int>( values: new[] { 1, 3, 2 }, Keys: new[] { 1, 2, 3 } ) .WithXAxis(xAxis) .WithYAxis(yAxis) .WithLayout(layout) .SaveHtml(@"..\..\..\html\006_Figures_as_GenericChart_Objects.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/LCrKozE.png) ## Scatter Plot ```xml= <ItemGroup> <PackageReference Include="FSharp.Data" Version="5.0.2" /> <PackageReference Include="Plotly.NET" Version="3.0.1" /> <PackageReference Include="Plotly.NET.CSharp" Version="0.8.0" /> </ItemGroup> ``` ```csharp= using FSharp.Data; using Plotly.NET; using Plotly.NET.LayoutObjects; ``` ```csharp= var title = Title.init(Text: "A Plotly Figure"); var csv = CsvFile.Load("https://raw.githubusercontent.com/plotly/datasets/master/iris.csv"); IEnumerable<string> GetData(string column) => csv.Rows.Select(row => row.GetColumn(column)); var X = Array.ConvertAll(GetData("SepalWidth").ToArray(), Single.Parse); var Y = Array.ConvertAll(GetData("SepalLength").ToArray(), Single.Parse); var Colors = GetData("Name") .Select(name => name switch { "Iris-setosa" => Color.fromString("blue"), "Iris-versicolor" => Color.fromString("orange"), _ => Color.fromString("deeppink") }); var layout = Layout.init<IConvertible>(Title: title, PlotBGColor: Color.fromString("#e5ecf6")); var xAxis = LinearAxis.init<IConvertible, IConvertible, IConvertible, IConvertible, IConvertible, IConvertible>( Title: Title.init("xAxis"), ZeroLineColor: Color.fromString("#ffff"), GridColor: Color.fromString("#ffff"), ZeroLineWidth: 2); var yAxis = LinearAxis.init<IConvertible, IConvertible, IConvertible, IConvertible, IConvertible, IConvertible>( Title: Title.init("yAxis"), ZeroLineColor: Color.fromString("#ffff"), GridColor: Color.fromString("#ffff"), ZeroLineWidth: 2); Plotly.NET.CSharp.Chart.Scatter<float, float, string>( x: X, y: Y, mode: StyleParam.Mode.Markers, MarkerColor: Color.fromColors(Colors) ) .WithLayout(layout) .WithXAxis(xAxis) .WithYAxis(yAxis) .SaveHtml(@"..\..\..\html\007_Scatter_Plot.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/pXK186r.png) ## Make Subplots ```csharp= using Plotly.NET; ``` ```csharp= int[] x = { 1, 2, 3 }; int[] y = { 4, 2, 1 }; var scatter = Plotly.NET.CSharp.Chart.Scatter<int, int, string>( x: x, y: y, mode: StyleParam.Mode.Markers, Name: "Scatter" ); var bar = Plotly.NET.CSharp.Chart.Column<int, int, int>( values: y, Keys: x, Name: "Bar" ); var chartCombined = new[] { scatter, bar }; Chart.Grid<IEnumerable<GenericChart.GenericChart>>(1, 2) .Invoke(chartCombined) .SaveHtml(@"..\..\..\html\008_Make_Subplots.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/Xd7HBm2.png) ## Adding Traces ```csharp= int[] x = { 1, 2, 3 }; int[] y = { 4, 2, 1 }; var scatter = Plotly.NET.CSharp.Chart.Scatter<int, int, string>(x: x, y: y, mode: StyleParam.Mode.Markers, Name: "Scatter") .WithMarkerStyle(Size: 10); var bar = Plotly.NET.CSharp.Chart.Column<int, int, int>(values: y, Keys: x, Name: "Bar"); Chart.Combine(new[] { scatter, bar }) .SaveHtml(@"..\..\..\html\009_Adding_Traces.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/KeYAadg.png) ## Updating Figure Layouts ```csharp= var title = Title.init(Text: "Using Layout() With Plotly Figures"); var layout = Layout.init<IConvertible>(Title: title, PlotBGColor: Color.fromString("#e5ecf6"), Font: Font.init(Size: 17)); Plotly.NET.CSharp.Chart.Column<int, int, int>(values: new[] { 4, 2, 1 }, Keys: new[] { 1, 2, 3 }) .WithLayout(layout) .SaveHtml(@"..\..\..\html\010_Updating_Figure_Layouts.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/ONw2oLe.png) ## Updating Traces ```csharp= var fig1 = new[] { Plotly.NET.CSharp.Chart.Column<int,int,int>( Keys:new []{0,1,2}, values:new []{2,1,3}, Name:"b", MarkerColor:Color.fromString("red") ), Plotly.NET.CSharp.Chart.Scatter<int,double,int>( x:new []{0,1,2}, y:new[]{4,2,3.5}, Name:"a", mode:StyleParam.Mode.Markers ) .WithMarkerStyle( Size:20, Color:Color.fromString("rgb(51, 204, 51)") ) }; var combinedFig1 = Chart.Combine(fig1); var fig2 = new[] { Plotly.NET.CSharp.Chart.Column<int,int,int>( Keys:new []{0,1,2}, values:new []{1,3,2}, Name:"c", MarkerColor:Color.fromString("#33cc33") ), Plotly.NET.CSharp.Chart.Scatter<int,double,int>( x:new []{0,1,2}, y:new[]{2,3.5,4}, Name:"a", mode:StyleParam.Mode.Markers ) .WithMarkerStyle( Size:20, Color:Color.fromString("rgb(255, 0,0)") ) }; var combinedFig2 = Chart.Combine(fig2); Chart.Grid<IEnumerable<GenericChart.GenericChart>>(1, 2) .Invoke(new[] { combinedFig1, combinedFig2 }) .SaveHtml(@"..\..\..\html\011_Updating_Traces.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/Q0guIn3.png) ```csharp= var fig1 = new[]{ Plotly.NET.CSharp.Chart.Column<int,int,int>( Keys:new []{0,1,2}, values:new []{2,1,3}, Name:"b", MarkerColor:Color.fromString("red") ), Plotly.NET.CSharp.Chart.Scatter<int,double,int>( x:new []{0,1,2}, y:new[]{4,2,3.5}, Name:"a", mode:StyleParam.Mode.Markers ) .WithMarkerStyle( Size:20, Color:Color.fromString("rgb(51, 204, 51)") ) }; var combinedFig1 = Chart.Combine(fig1) .WithMarkerStyle(Size: 20, Color: Color.fromString("blue")); var fig2 = new[]{ Plotly.NET.CSharp.Chart.Column<int,int,int>( Keys:new []{0,1,2}, values:new []{1,3,2}, Name:"c", MarkerColor:Color.fromString("#33cc33") ), Plotly.NET.CSharp.Chart.Scatter<int,double,int>( x:new []{0,1,2}, y:new[]{2,3.5,4}, Name:"a", mode:StyleParam.Mode.Markers ) .WithMarkerStyle( Size:20, Color:Color.fromString("rgb(255, 0,0)") ) }; var combinedFig2 = Chart.Combine(fig2) .WithMarkerStyle( Size: 20, Color: Color.fromString("blue") ); Chart.Grid<IEnumerable<GenericChart.GenericChart>>(1, 2) .Invoke(new[] { combinedFig1, combinedFig2 }) .SaveHtml(@"..\..\..\html\012_Updating_Traces.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/r2qBpzA.png) ## Overwrite Existing Properties ```csharp= var marker = Marker.init(Opacity: 0.4); Plotly.NET.CSharp.Chart.Column<int, int, int>( Keys: new[] { 1, 2, 3 }, values: new[] { 1, 3, 2 }, MarkerColor: Color.fromString("red") ) .WithMarker(marker) .SaveHtml(@"..\..\..\html\013_Overwrite_Existing_Properties.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/gDmVhkV.png) ## Updating Figure Axes ```csharp= var rand = new Random(); var x = Enumerable.Range(1, 100).ToArray(); var y1 = x.Select(_ => rand.NextDouble() * 10 + 5); var y2 = x.Select(_ => rand.NextDouble() * 5); var subPlots = new[]{ new []{ new Tuple<StyleParam.LinearAxisId, StyleParam.LinearAxisId>( StyleParam.LinearAxisId.X.NewX(1), StyleParam.LinearAxisId.X.NewY(1) ), new Tuple<StyleParam.LinearAxisId, StyleParam.LinearAxisId>( StyleParam.LinearAxisId.X.NewX(2), StyleParam.LinearAxisId.X.NewY(1) ) } }; var layoutGrid = LayoutGrid.init(Rows: 1, Columns: 2, SubPlots: subPlots); var chart1 = Plotly.NET.CSharp.Chart.Point<int, double, int>(x: x, y: y1, Name: "1,1") .WithAxisAnchor(X: 1); var chart2 = Plotly.NET.CSharp.Chart.Point<int, double, int>(x: x, y: y2, Name: "1,2") .WithAxisAnchor(X: 2); Chart.Combine(new[] { chart1, chart2 }) .WithLayoutGrid(layoutGrid) .WithXAxisStyle(title: Title.init(), ShowGrid: false, Id: StyleParam.SubPlotId.NewXAxis(1)) .WithXAxisStyle(title: Title.init(), ShowGrid: false, Id: StyleParam.SubPlotId.NewXAxis(2)) .SaveHtml(@"..\..\..\html\014_Updating_Figure_Axes.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/mEEe5jk.png) ## Chaining Figure Operations ```csharp= var marker = Marker.init( Size: 20, Color: Color.fromString("yellow"), Outline: Line.init(Width: 1.5) ); var fig1 = new[]{ Plotly.NET.CSharp.Chart.Column<int,int,int>( Keys:new []{0,1,2}, values:new []{2,1,3}, Name:"b", MarkerColor:Color.fromString("red") ) .WithMarker(marker), Plotly.NET.CSharp.Chart.Scatter<int,double,int>( x:new []{0,1,2}, y:new[]{4,2,3.5}, Name:"a", mode:StyleParam.Mode.Markers ) .WithMarkerStyle(Size:20,Color:Color.fromString("blue")) }; Chart.Combine(fig1) .WithTitle(title: "Chaining Multiple Chart Operations With A Plotly Chart", TitleFont: Font.init(Size: 15)) .WithXAxisStyle(title: Title.init(), ShowGrid: false) .SaveHtml(@"..\..\..\html\015_Chaining_Figure_Operations.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/femnY3n.png) ## Property Assignment ```csharp= var layout = new Layout(); layout.SetValue("title", "Using Property Assignment Syntax With GenericChart Object"); layout.SetValue("plot_bgcolor", "#e5ecf6"); layout.SetValue("showlegend", true); Plotly.NET.CSharp.Chart.Column<int, int, int>( Keys: new[] { 1, 2, 3 }, values: new[] { 1, 3, 2 }, MarkerColor: Color.fromString("red") ) .WithLayout(layout) .SaveHtml(@"..\..\..\html\016_Property_Assignment.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/CkStI1z.png) ```csharp= var marker = new Marker(); var line = new Line(); line.SetValue("width", 4); line.SetValue("color", "black"); marker.SetValue("line", line); Plotly.NET.CSharp.Chart.Column<int, int, int>( Keys: new[] { 1, 2, 3 }, values: new[] { 1, 3, 2 }, MarkerColor: Color.fromString("red") ) .WithMarker(marker) .SaveHtml(@"..\..\..\html\017_Property_Assignment.html", OpenInBrowser: true); ``` ![](https://i.imgur.com/GIAQJBb.png) ###### tags: `Plotly.NET` `サンプル`