【问题标题】:Plotly R: setting the spacing between axis label and axis ticks labelsPlotly R:设置轴标签和轴刻度标签之间的间距
【发布时间】:2017-04-05 10:49:14
【问题描述】:

除了更改边距之外,还有什么方法可以设置轴标签和轴刻度标签之间的间距?

示例图:

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

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

【问题讨论】:

  • 对于看到这一点的其他人来说,唯一有效的方法是结合使用对峙答案和边缘答案。

标签: r plotly


【解决方案1】:

推荐解决方案

由于plotly v4.9.2,您可以使用新的standoff layout attribute 其中

设置轴标签和标题文本之间的间距(以 px 为单位)默认值是轴刻度标签、标题 font.size 和轴 linewidth 的函数。请注意,轴标题位置始终限制在边距内,因此实际间距始终小于设置或默认值。通过设置standoff 并打开automargin,plotly.js 将推动边距以适应给定间距的轴标题。

例子:

plotly::plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000')) %>%
  plotly::layout(yaxis = list(title = list(text = "Gross horsepower",
                                           standoff = 40L)))


过时的解决方法

问题

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

生成上述图的 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 = "")))

这会导致:

y轴标题组件说明:

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

【讨论】:

    【解决方案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)
    

    希望这有帮助吗?

    【讨论】:

    • 感谢您的回答,但我想避免那样做。我正在寻找一种使其自动化的方法,因此我不需要为每个绘图调整边距。
    • @r4ndomw4lk 你可以写一个函数来增加左边距(或者甚至是一个自定义标题增加距离为in my answer below)来自动化,不是吗?喜欢add_margin &lt;- function(plotly_object) { plotly_object %&gt;% layout(margin = list(l = 60)) }
    【解决方案3】:

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

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

    【讨论】:

      【解决方案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)
      

      【讨论】:

        【解决方案5】:

        我在 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 
          )
        

        之前:

        之后:

        【讨论】:

        • 问题是询问如何在 R 中执行此操作。据我所知,这是不相关的。我尝试了一些类似于你在 R 中所做的事情,但它并没有解决问题。
        猜你喜欢
        • 1970-01-01
        • 2023-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 2017-12-27
        • 1970-01-01
        相关资源
        最近更新 更多