Plotly.js 添加标记将填充添加到 x 轴

Posted

技术标签:

【中文标题】Plotly.js 添加标记将填充添加到 x 轴【英文标题】:Plotly.js Adding markers adds padding to x-axis 【发布时间】:2018-03-05 03:13:05 【问题描述】:

在向折线图添加标记时,有没有办法防止 Plotly 更改 x 轴上的填充。 请参阅下面的两个 sn-ps。唯一的区别是第 24 行,其中 'lines' 更改为 'lines+markers'

第一个没有标记的 sn-p:

<head>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>

<body>

  <div id="myDiv">
  </div>
  <script>
    var layout = 
      xaxis: 
        showticklabels: true,
        tickmode: 'auto',
        nticks: 15,
        tickangle: 45,
        rangemode: 'tozero',
      ,
    ;

    var trace1 = 
      x: ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5', 'Week 6', 'Week 7', 'Week 8'],
      y: [10, 15, 13, 17, 10, 15, 13, 17],
      type: 'scatter',
      mode: 'lines',
    ;

    var data = [trace1];

    Plotly.newPlot('myDiv', data, layout);
  </script>
</body>

第二个带有标记的 sn-p:

<head>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>

<body>

  <div id="myDiv">
  </div>
  <script>
    var layout = 
      xaxis: 
        showticklabels: true,
        tickmode: 'auto',
        nticks: 15,
        tickangle: 45,
        rangemode: 'tozero',
      ,
    ;

    var trace1 = 
      x: ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5', 'Week 6', 'Week 7', 'Week 8'],
      y: [10, 15, 13, 17, 10, 15, 13, 17],
      type: 'scatter',
      mode: 'lines+markers',
    ;

    var data = [trace1];

    Plotly.newPlot('myDiv', data, layout);
  </script>
</body>

【问题讨论】:

你能说得更具体点吗?在 chrome (Windows/Mac/Linux) 上,x 轴上的填充是相同的。我什至将两者都保存为图像并覆盖它们——除了顶点处的点之外,两者是相同的。您认为哪个浏览器/操作系统有所不同?你能发布它的屏幕截图吗? 我添加了一个显示差异的屏幕截图。我在 Chrome (Windows) 上。 知道了,我想我有一个不错的答案给你... 【参考方案1】:

这有点令人困惑,因为它实际上是关闭了 y 轴。 无论如何,这可以通过将yaxis 设置为showgrid: false 然后偏移yaxislayer-above 以重新定位标签来解决。

这可以像我一样在 css 中完成,也可以在 javascript 中完成。

我可能在这里没有像素相同(设置为 102 像素),但你应该明白了。

<head>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
  <style>
  .yaxislayer-above 
     transform: translate(102px,100px);
  
  </style>
</head>

<body>

  <div id="myDiv">
  </div>
  <script>
    var layout = 
      yaxis: 
        showgrid: false,
      ,
      xaxis: 
        showticklabels: true,
        tickmode: 'auto',
        nticks: 15,
        tickangle: 45,
        rangemode: 'tozero',
      ,
    ;

    var trace1 = 
      x: ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5', 'Week 6', 'Week 7', 'Week 8'],
      y: [10, 15, 13, 17, 10, 15, 13, 17],
      type: 'scatter',
      mode: 'lines+markers',
    ;

    var data = [trace1];

    Plotly.newPlot('myDiv', data, layout);
  </script>
</body>

【讨论】:

谢谢。绝对是一个很好的答案。但是,它实际上仍然在做同样的事情并改变 x 轴。现在我们只是移动 y 轴,所以它不那么明显。 imgur.com/a/pi49e 在这个玩具示例中,它并没有太大的区别 - 但在我的实际用例中,它更复杂是非常明显的。看到这个:imgur.com/a/fhFuQ 听起来不错。期待看到答案。谢谢! 只是一个碰撞。很想看看你的建议。 @Wessi - 嗯仍然在玩它 - 我的想法有点做作......只要保持问题开放,当我有机会时我会玩它。奇怪的是 为什么 它们的缩放比例不同 - 没有真正的原因,要查看 plotlyjs 源并深入了解它......【参考方案2】:

我遇到了同样的问题,我找到的解决方案是将autorange 设置为false AND 指定x 轴range。见:https://plot.ly/javascript/reference/#layout-xaxis-range

固定示例:

<head>
  <script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>

<body>

  <div id="myDiv">
  </div>
  <script>
    var layout = 
      xaxis: 
        showticklabels: true,
        tickmode: 'auto',
        nticks: 15,
        tickangle: 45,
        rangemode: 'tozero',
        range: [0, 7]
      ,
    ;

    var trace1 = 
      x: ['Week 1', 'Week 2', 'Week 3', 'Week 4', 'Week 5', 'Week 6', 'Week 7', 'Week 8'],
      y: [10, 15, 13, 17, 10, 15, 13, 17],
      type: 'scatter',
      mode: 'lines+markers',
    ;

    var data = [trace1];

    Plotly.newPlot('myDiv', data, layout);
  </script>
</body>

【讨论】:

请注意,当提供range 时,autorange 会自动设置为False

以上是关于Plotly.js 添加标记将填充添加到 x 轴的主要内容,如果未能解决你的问题,请参考以下文章

将配置模式添加到 Plotly.Py 离线 - 模式栏

如何在 plotly.js 中添加针或刻度盘来测量指示器?

在 plotly.js 中向 y 轴标签添加一个单位

如何在 PLOTLY JS 中为每个子图添加标题

从 UITableViewController 添加标记到 UIViewController

使用android将图像加载到地图标记中