除了更改边距外,是否有设置轴标签和轴刻度标签之间间距的方法?
示例绘图:
plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))
就像上面示例图中一样,y轴标题与该轴的刻度标签重叠。有没有一种方法可以在它们之间设置间距?
如上例绘图,y轴标题与该轴刻度标签重叠,是否有一种方法可以在它们之间设置间距?
自从plotly v4.9.2以来,您可以使用新的standoff
布局属性,它
设置轴标签和标题文本之间的距离(以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)))
仅仅增加左边距如@Codutie在他的回答中建议只能在一定程度上帮助(至少在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))
相反,您可以依靠以下变通方法通过设置适当的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 = "")))
rep("\n ", 3)
:这是增加距离的主要技巧,只需在实际标题("Gross horsepower"
)后缀换行符和不间断空格即可。
- rep(" ", 20)
:这是为了确保Plotly的自动缩放不会再次干扰而采取的额外措施——用40个不间断空格包装实际标题(当然可以更多/更少)。否则,文本将被放置在两个轴刻度之间,一旦绘图高度足够大,就会“物理”允许它——这会有点破坏我们手动设置距离的尝试,因为我们必须使用一个更大的换行符-不间断空格组合来再次获得相同的距离,并且更重要的是,距离将取决于绘图高度。在上面的绘图中,这并不是必需的,因为有足够的y轴刻度,您需要显示具有超过1000像素的高度的绘图才能达到那个关键点。standoff
正是我所需要的。对于其他人来说,您可以将 ggplotly()
的输出导入到 layout()
中以更改 standoff
值,它将打印一个新标题,因此您需要执行例如 theme(axis.title.y = element_blank())
来关闭原始标题。 - DaveArmstrong使用standoff
选项。
library(plotly)
y <- list(
title = list(text="Y Axis",standoff=20)
)
plot_ly(mtcars, x = ~ wt, y = ~ paste0(hp, '0000'))%>%layout(yaxis=y)
您可以尝试通过像这样将边距添加到您的图表中来进行修改:
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)
add_margin <- function(plotly_object) { plotly_object %>% layout(margin = list(l = 60)) }
- Salim B我通常使用ticksuffix选项来创建标签后面的额外空间。
layout(
xaxis = list(title = "", automargin=T, ticksuffix = "%")
,yaxis = list(title = "", automargin=T, ticksuffix = " ")
)
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
)
最初的回答:
改良后: