【问题标题】:How to correctly place axis labels in Plotly (R) subplots with multiple axes?如何在具有多个轴的 Plotly (R) 子图中正确放置轴标签?
【发布时间】:2020-08-16 13:55:46
【问题描述】:

我正在尝试使用 plotly (v. 4.9.2.1) 在 R 中创建一个图,其中三个面板共享一个 x 轴,最后一个显示两个变量,第二个变量位于单独的 y 轴上。我在下面用假数据制作了一个玩具示例,重现了我遇到的基本问题。问题是,一旦我包含第二个 y 轴,我就无法让 x 轴标题正确出现在所有图的底部。在下面的代码中,我专门为所有跟踪输入了 xaxis 参数,尽管删除它并没有任何区别。此外,将 x 标题放置在其他绘图的布局中也不会改变任何内容,并且最终绘图中的边距是为了确保 y 轴刻度标签可见并且不会更改轴标签位置。

set.seed(123)
x1 <- seq(from=1, to=100, by=5)
x2 <- seq(from=1, to=100, by=3)
x3 <- seq(from=1, to=100, by=2)
x4 <- c(1,23,50,80)

y1 <- rnorm(length(x1))
y2 <- rnorm(length(x2))
y3 <- rnorm(length(x3))
y4 <- c(0,10,0,10)

p1 <- plot_ly(showlegend=FALSE) %>%
  add_markers(x=x1, y=y1, xaxis='x')

p2 <- plot_ly(showlegend=FALSE) %>%
  add_markers(x=x2, y=y2, xaxis='x')

p3 <- plot_ly(showlegend=FALSE) %>%
  add_markers(x=x3, y=y3, yaxis='y3', xaxis='x') %>%
  add_lines(x=x4, y=y4, line=list(shape='hv'), yaxis='y4', xaxis='x') %>%
  layout(yaxis3=list(overlaying='y4'),
         yaxis4=list(side='right'),
         margin=list(r=50))

subplot(p1, p2, p3, nrows = 3, shareX=TRUE) %>% layout(xaxis=list(title='Time'))

【问题讨论】:

    标签: r plotly axis-labels subplot


    【解决方案1】:

    默认情况下,xaxis 锚定到默认的“yaxis”。在您的情况下,它是最重要的。

    要将 x 轴放置在底部,您可以将其锚点修改为另一个 y 轴:“y2”用于中间子图,“y3”或“y4”用于底部子图。

    为此,请在添加布局时指定 xaxis 的锚属性:

    layout(xaxis=list(title='Time', anchor="y3"))
    

    注意:要检查您的代码并查看您的轴是如何相互锚定的,您可以以 json 格式打印绘图图形的完整结构:

    fig <- subplot(p1, p2, p3, nrows = 3, shareX=TRUE)
    fig <- layout(fig, xaxis=list(title='Time', anchor="y3"))
    plotly_json(fig) 
    

    您将能够检查:

     "layout": {
        "xaxis": {
          "domain": [0, 1],
          "automargin": true,
          "title": "Time",
          "anchor": "yaxis2"
        },
        "yaxis3": {
          "overlaying": "y4",
          "anchor": "x",
          "domain": [0, 0.313333333333333]
        },
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-06
      • 2021-03-01
      • 2017-05-10
      • 2021-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多