Plotly R:设置轴标签和轴刻度标签之间的间距

时间:2017-04-05 10:49:14

标签: r plotly

除了更改边距之外,有没有办法在轴标签和轴刻度标签之间设置间距?

示例图:

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))

如上面的示例图中,y轴的标题是该轴的重叠刻度标签。有没有办法在它们之间设置间距?

5 个答案:

答案 0 :(得分:8)

增加左边距as @Codutie suggests in his answer确实只在某种程度上有所帮助(至少在Plotly v4.7.1 +中)。左侧150像素边距的大部分是浪费的空间,如下面的屏幕截图所示: enter image description here

生成上述情节的R代码(来自@Codutie):

library(plotly)

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
  layout(margin = list(l = 150, r = 20, b = 10, t = 10))

由于Plotly的目标是响应,它会自动进行大量的布局缩放 - 这通常是一件好事恕我直言,因为你不必为了得到一个可呈现的图表而过分捣乱。当然,Plotly自动缩放的结果并不总是完美的或者你想要实现的结果,这就是为什么there are plenty of dedicated (layout) attributes让你操纵你的情节的某些方面的原因。 不幸的是,没有属性可以设置轴标签与轴本身之间的距离(或轴刻度标签)。

相反,您可以依靠以下解决方法通过设置适当的y轴标题字符串来操纵轴与其标签之间的距离:

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
    layout(margin = list(l = 150, r = 20, b = 10, t = 10),
           yaxis = list(title = paste0(c(rep(" ", 20),
                                         "Gross horsepower",
                                         rep(" ", 20),
                                         rep("\n ", 3)),
                                       collapse = "")))

这会导致: enter image description here

y轴标题组件的说明:

  • rep("\n ", 3):这是增加距离的诀窍的主要部分 - 只是用实际标题("Gross horsepower")作为换行符和不间断空格的后缀。
  • rep(" ", 20):这是确保Plotly的自动缩放不会再次干扰的额外措施 - 将实际标题包含在40个非破坏空间中(当然可以更多/更少)。否则,一旦情节高度变得足够大以“物理上”允许它,文本总马力将被放置在两个轴刻度之间 - 这将有助于我们尝试手动设置距离,因为我们会必须使用更大的换行符 - 非破坏空间组合来再次达到相同的距离 - 更重要的是 - 距离将取决于绘图高度。在上面的图中,这并不是必需的,因为你需要多少y轴刻度才能显示高度超过1000px的图,以达到临界点。

答案 1 :(得分:4)

我通常要做的是利用ticksuffix选项,该选项可以在标签后面创建额外的空间。

layout(
      xaxis = list(title = "", automargin=T, ticksuffix = "%")
     ,yaxis = list(title = "", automargin=T, ticksuffix = "   ")
)

答案 2 :(得分:4)

使用 standoff 选项

library(plotly)

y <- list(
  title = list(text="Y Axis",standoff=20)
)

plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))%>%layout(yaxis=y)

答案 3 :(得分:2)

您可以尝试通过将边距添加到图表来修改边距,如下所示:

m <- list(l=150, r=20, b=10, t=10) # l = left; r = right; t = top; b = bottom
plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>% layout(margin=m)

希望这有帮助吗?

答案 4 :(得分:0)

我在Python中处理此问题的方法是简单地添加一个换行符,然后添加空格,您实际上可以使用一个空行来创建分隔符。哈克,但它可以工作。您可以在第二行中看到它。

 yaxis=go.layout.YAxis(
    title_text="<b>Number of Articles<br> </b>",
    titlefont=dict(size=12)),
    paper_bgcolor="white",
    title=go.layout.Title(
    xref="paper",
    x=0.5 
  )

之前:

Before

之后:

After