提问者:小点点

防止次打印轴从图形区域掉落


我试图创建一个有两个y轴的绘图图,一个在绘图的左侧,一个在绘图的右侧。我得到了以下(可复制的示例)代码工作:

library(dplyr)
library(plotly)

plot_ly() %>% 
  add_lines(x = ~1:3, y = ~10*(1:3), name = "slope of 10") %>% 
  add_lines(x = ~2:4, y = ~1:3, name = "slope of 1", yaxis = "y2") %>% 
  layout(
    title = "Double Y Axis", 
    yaxis2 =  list(tickfont = list(color = "red"),
                   overlaying = "y",
                   side = "right",
                   title = "second y axis"),
    xaxis = list(title="x")
  )

然而,根据我的实际数据,这个图例的位置有点奇怪,并且与y轴刻度标签和标题重叠。因为它是反应性数据,我不知道每种情况下的y轴会是什么样子。因此,我想将图例移动到底部(水平定向),以给y轴更多的空间。虽然我有移动图例的代码(见下面的代码块),但它导致了图形的重新缩放,使得次要的Y轴不可读。正如您在示例图片中看到的,小数不再位于图形区域中,Y轴标题现在与刻度标签重叠。

plot_ly() %>% 
  add_lines(x = ~1:3, y = ~10*(1:3), name = "slope of 10") %>% 
  add_lines(x = ~2:4, y = ~1:3, name = "slope of 1", yaxis = "y2") %>% 
  layout(
    title = "Double Y Axis", 
    yaxis2 =  list(tickfont = list(color = "red"),
                   overlaying = "y",
                   side = "right",
                   title = "second y axis"),
    xaxis = list(title="x"),
    legend = list(orientation = 'h', x = 0.35, y = -.15)
  )

是否可以重新缩放绘图以使其可读?我尝试调整次y轴的位置,但这也导致了一个丑陋的结果(因为轴将位于绘图的“中间”)。因此,我更喜欢的结果是y轴及其标题的位置与第一个代码示例中的位置相似,图例(水平方向)位于绘图底部,与第二个代码示例中的位置相同。


共1个答案

匿名用户

您可以在绘图中添加边距(目前仅增加“r”右侧的边距),因为标题固定在右侧。

plot_ly() %>% 
  add_lines(x = ~1:3, y = ~10*(1:3), name = "slope of 10") %>% 
  add_lines(x = ~2:4, y = ~1:3, name = "slope of 1", yaxis = "y2") %>% 
  layout(
    title = "Double Y Axis", 
    yaxis2 =  list(tickfont = list(color = "red"),
                   overlaying = "y",
                   side = "right",
                   title = "second y axis"
                   ),
    xaxis = list(title="x"),
    margin = list(
          r = 50
    ),
    legend = list(orientation = 'h', x = 0.35, y = -.15)
  ) 
  

示例