在 plotly f# 中移动图例

Moving the legend in plotly f#

我一直在尝试将情节中的图例移动到情节的顶部或底部,以保持具有不同图例的情节的统一大小,但我一直无法这样做。即使是 plotly 文档也不是很有帮助。有人知道怎么做吗?

我尝试移动此示例代码的图例,但没有成功。


let chart = Chart.Scatter(xs,
             [10.; 20.; nan; 15.; 10.; 5.; 15.;nan; 20.; 10.; 10.; 15.; 25.; 20.; 10.], 
             StyleParam.Mode.Lines_Markers, Name="<b>No</b> Gaps")             
             |> GenericChart.mapTrace (Trace2DStyle.Scatter(ConnectGaps = true))
[
    
    chart;
    Chart.Scatter(xs,
             [5.; 15.; nan; 10.; 5.; 0.; 10.; nan; 15.; 5.; 5.; 10.; 20.; 15.; 5.], 
             StyleParam.Mode.Lines_Markers, Name="Gaps")
] |> Chart.combine

谢谢!

This GitHub comment 给出了 Plotly.NET 2.0 的一些相关信息。简而言之,您可以像这样将图例移动到图的顶部:

open Plotly.NET.LayoutObjects

let myLegend = 
    Legend.init(
        Orientation = StyleParam.Orientation.Horizontal,
        Y = 1.1
    )

    ...
    |> Chart.combine
    |> Chart.withLegend(myLegend)

Y 设置为 0.0 会将图例放在图表下方。

有关 Legend.init 的更多详细信息,请参见 here

没有所有选项的示例,但是如果您使用 plotly.net 网站上的搜索栏,您可以搜索显示各种选项的相关函数。

您可能需要 Chart.withLegendStyle 功能。您可以使用 XY 参数来移动图例。 Plotly.NET 的 API 文档中的函数文档描述了参数和选项。

一些示例数据:

#r "nuget: Plotly.NET"

open Plotly.NET

let xs = [1.0 .. 4.0]
let y1 = xs |> List.map (fun x -> 
    -4.0 + if x = 3.0 then nan else x*1.0)
let y2 = xs |> List.map (fun x -> 
    3.0 + if x = 2.0 then nan else -x*2.0)

要将图例置于下方,您只需更改图例方向,因为水平图例默认置于下方:

[   
    Chart.Scatter(xs,y1, 
        StyleParam.Mode.Lines_Markers, 
        Name="<b>No</b> Gaps")             
    |> GenericChart.mapTrace (Trace2DStyle.Scatter(ConnectGaps = true))
    
    Chart.Scatter(xs,y2, 
                  StyleParam.Mode.Lines_Markers, 
                  Name="Gaps")
]
|> Chart.combine
|> Chart.withLegendStyle(Orientation=StyleParam.Orientation.Horizontal)
|> Chart.show

要放置上面的图例,您还必须更改 Y 参数:

[   
    Chart.Scatter(xs,y1, 
        StyleParam.Mode.Lines_Markers, 
        Name="<b>No</b> Gaps")             
    |> GenericChart.mapTrace (Trace2DStyle.Scatter(ConnectGaps = true))
    
    Chart.Scatter(xs,y2, 
                  StyleParam.Mode.Lines_Markers, 
                  Name="Gaps")
]
|> Chart.combine
|> Chart.withLegendStyle(Orientation=StyleParam.Orientation.Horizontal,
                         Y=1.1)