【发布时间】:2018-11-16 17:23:45
【问题描述】:
我在 ggplot2 中使用 for 循环制作了许多数字,但我的数据标签超出了绘图边距。我试过使用 expand,但它只适用于某些数字。当我尝试使用 par(mar) 时,我收到以下错误消息:
错误:不知道如何将 o 添加到绘图中。
我也尝试使用 ggsave 保存为一个非常宽的文件,但 1) 看起来很奇怪,2) 无法制作这么多不同的数字。
有人知道其他解决方法吗?理想情况下,一种根据条形+数据标签的长度自动设置每个图形的内部绘图边距的方法。下面是我正在使用的代码和一个示例图(您可以看到“x”的栏在边距之外)。提前谢谢!
for (i in each) {
temp_plot = ggplot(data= subset(Data, Each == i)) +
geom_bar(stat = "identity",
aes(x = reorder(Letter, +Number), y = Number, fill = factor(Category))) +
xlab("Letters") +
ggtitle(paste0("Title"), subtitle = "Subtitle") +
coord_flip() +
theme_classic() +
theme(plot.title = element_text(hjust = 0.5, size=16),
plot.subtitle = element_text(hjust = 0.5)) +
scale_fill_manual(values = c("#00358E", "#00AFD7"),
name= "Category",
labels=c("This","That")) +
geom_text(family="Verdana", size=3,
aes(label=Number2, x=reorder(Letter, +Number), y=Number),
position=position_dodge(width=0.8), hjust=-0.001) +
scale_y_continuous(labels = comma, expand = c(0.01,0)) +
scale_x_discrete(labels = letters)
ggsave(temp_plot, file=paste0("Example", i,".jpeg"))
}
【问题讨论】:
-
对此我的一般习惯用法是为
scale_y_continuous()显式设置limits=c(0,b)并确保b是一个%。说 % 是你需要弄清楚的,因为我们都有审美偏好。如果是一次性情节,我只需硬编码 # 但如果是一系列类似的情节(像这样),我会使用 % 计算方法。 -
您可以在
coord_flip()中添加clip = off,类似于this -
很难说没有reproducible example。我不确定您的 y 比例中的
expand参数到底发生了什么,但看起来您在数据范围内设置了非常小的填充或没有填充。查看scale_*_continuous的文档并尝试使用expand_scale -
我认为您不能自动更改绘图边距以考虑本示例中文本标签的长度,因为拉伸和压缩绘图会影响所需的缓冲区量,以 x 为单位轴项。也许您可以将标签向内定位?查看接受的答案here 进行讨论。在您的情况下,这将类似于
hjust = "inward"forgeom_text()。