【问题标题】:ggplot2 data labels outside marginsggplot2数据标签在边距之外
【发布时间】: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" for geom_text()

标签: r ggplot2


【解决方案1】:

我想出了一个简单的解决方案:+ ylim(0, 130000)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 2019-12-10
    • 2021-09-06
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多