【问题标题】:Are options and WithSize etc in XPlot specific to only certain charts?XPlot 中的 options 和 WithSize 等是否仅特定于某些图表?
【发布时间】:2016-10-12 04:31:13
【问题描述】:

我在 FSLab 教程中尝试了 Chart.WithSizedisplayZoomButtons = true,但似乎没有改变输出。

在直接使用 XPlot.GoogleCharts 的其他项目中也是如此。

我错过了什么吗?

【问题讨论】:

  • 你能用 XPlot.Plotly 代替吗?

标签: f# fslab


【解决方案1】:

从 nuget 下载 Plotly 1.4.2 并将 FSLab 包目录中的 dll 替换为 XPlotly(请参阅 Plotting with Xplotly Q)。然后就可以使用Xplotly的控件进行放大缩小、保存图表等操作了。例如:

#load @"..\..\FSLAB\packages\FsLab\FsLab.fsx"
open XPlot.Plotly
open XPlot.Plotly.Graph
open XPlot.Plotly.Html
//open XPlot.GoogleCharts

let layout = Layout(title = "Basic Bar Chart")
["giraffes", 20; "orangutans", 14; "monkeys", 23]
    |> Chart.Bar
    |> Chart.WithLayout layout
    |> Chart.WithHeight 400
    |> Chart.WithWidth 700
    |> Chart.Show

【讨论】:

  • 看起来有很多图表没有通过XPlot.Plotly 公开...尤其是缺少烛台、饼图和日历:/
  • @ReiMiyasaka 是的,我注意到了。我对 Xplot 中的 GoogleCharts 不是很熟悉,但我遇到了同样的问题,无法调整图表的大小。您可能想在 github 上提出问题。
  • 我决定尝试实现我自己的 html/javascript 图表代理。使用嵌入式 ASP.Net Core 服务器应该不会太难,它可以让我访问所有免费的 javascript 可视化库。
  • @ReiMiyasaka 很高兴在 github 上看到它。 :)
  • 也许吧!它不会是很多代码,因为我不打算让它几乎像 XPlot 那样可组合或可配置——只是将大部分生成的 html/js 硬编码到 .fsx 文件中,这样我就可以搞砸了它直接。它可能更适合博客条目——除非我现在没有博客。我会想办法的。
【解决方案2】:

使用 Plotly 的非常简单的图表解决方案(并且有效):

open Newtonsoft.Json

let html = """<head>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
  <div id="myDiv" style="width: 100%; height: 100%;"></div>
  <script>
    var data = __DATA__;
    var layout = __LAYOUT__;
    Plotly.newPlot('myDiv', data, layout);
  </script>
</body>"""

let (=>) k v = k, (v:>obj)

let doPlot data layout =
    let data = JsonConvert.SerializeObject data
    let layout = JsonConvert.SerializeObject layout
    let path = Path.GetTempPath() + DateTime.Now.Ticks.ToString() + ".html"
    File.WriteAllText(path, html.Replace("__DATA__", data).Replace("__LAYOUT__", layout))
    System.Diagnostics.Process.Start(path)

let layout =
    [ "title" => "Plot"
      "xaxis" => dict [
        "title" => "Ticks"
        "showgrid" => false
        "zeroline" => false
      ]
      "yaxis" => dict [
        "title" => "Price"
        "showline" => false
      ]
    ] |> dict

let data = [
    dict [ "x" => [1999; 2000; 2001; 2002]
           "y" => [16; 5; 11; 9]
         ]
    ]

doPlot data layout

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多