如何在不改变绘图宽度的情况下使用 ggplot2 在 R 中添加可变大小的 y 轴标签?

Posted

技术标签:

【中文标题】如何在不改变绘图宽度的情况下使用 ggplot2 在 R 中添加可变大小的 y 轴标签?【英文标题】:How can I add variable size y-axis labels in R with ggplot2 without changing the plot width? 【发布时间】:2014-04-08 16:31:41 【问题描述】:

我在 R 中使用 ggplot2 制作了一个绘图,我想在 y 轴上添加一个水平文本标签。但是,根据我的文本长度,R 会相应地压缩我的绘图以创建一个固定宽度的图像。但是,无论文本宽度如何,我都需要图的长度相同,并且具有相同的起始位置和停止位置(边距)。

我尝试通过覆盖默认的 ggplot2 主题元素来更改绘图边距,如下所示:

library(ggplot2)
png(filename="sample.png", width=5600, height=70)
plot.data <- data.frame(start.points=c(my_start),end.points=c(my_stop))
p <- ggplot(plot.data)
p + geom_rect(aes(xmin=start.points, xmax=end.points, ymin=0, ymax=1), fill="red") + theme_bw() + ylab("sample_title") + 
theme(axis.title.y = element_text(size = 30, colour = "black", angle = 0), axis.text = element_blank(), legend.key = element_blank(), axis.ticks = element_blank(), plot.margin = unit(c(0.1, 0.1, 0.1, 12), "lines"))
dev.off()

所以这是一个很好的情节,但根据我的轴标签,整个情节被拉伸或压缩。有人可以帮我找到一种在更改轴标签文本时保持绘图宽度和边距不变的方法吗?如果轴标签文本太长并且延伸到左侧图像边框之外进入绘图本身,那没关系,只要绘图不改变。

感谢您的帮助!我一直在努力解决这个问题太久了。

【问题讨论】:

【参考方案1】:

在这种情况下,更改边距没有帮助,因为它们只是在轴标签之外添加了固定空间。您可以将轴标签填充到预期的最大长度以保持尺寸相同,这不是最优雅的解决方案,但我认为element_text 目前不能做固定宽度(也许有人可以纠正我) .无论如何,您可以尝试以下方法之一:

ylab(sprintf("%40s", "sample_title"))

(用空格将轴标题填充为 40 个字符 - 尽管总宽度仍会因您的字体而异)

ylab(paste(sprintf("%40s", ""), "\nsample_title\n")

(在您的轴标题上方添加一行 40 个空格并在下方添加一个空行 - 只要轴标题不超过该宽度,您应该始终为您提供相同的宽度)

【讨论】:

以上是关于如何在不改变绘图宽度的情况下使用 ggplot2 在 R 中添加可变大小的 y 轴标签?的主要内容,如果未能解决你的问题,请参考以下文章

在不删除数据的情况下限制 ggplot2 轴(超出限制):缩放

如何在不增加宽度的情况下向文本区域添加填充?

如何在不影响宽度的情况下定位固定[重复]

如何在不更改 matplotlib 默认值的情况下使用 seaborn?

如何更改使用 ggplot2 制作的绘图的背景颜色

在不影响导航栏的情况下更改 NavigationController 的内容视图宽度