在ggplot2中更改条形图轮廓

Posted

技术标签:

【中文标题】在ggplot2中更改条形图轮廓【英文标题】:Changing barchart outline in ggplot2 【发布时间】:2022-01-01 10:53:18 【问题描述】:

我使用ggplot2 创建了一个条形图,但我的一些条形图合并在一起。这是我使用的代码:

library(ggplot2)
library(RColorBrewer)

bird_plot_error <- test %>%
  group_by(bird) %>%
  summarise(key = unique(dr),
            dr = sum(dr)) %>%
  group_by(bird) %>%
  mutate(dr = dr/sum(dr) * key) %>%
  ungroup %>%
  mutate(bird = fct_reorder(bird, desc(bird))) %>%
  ggplot(aes(x=bird, y=dr, fill="lightblue")) +
  geom_bar(stat="identity")+
  theme_classic() +
  theme(legend.position="none")+
  coord_flip() +
  scale_fill_brewer(palette="Paired")+
  ylim(0, 0.8)

bird_plot_error <- bird_plot_error + ggtitle("Detection rate by bird") +
     xlab("Bird") + ylab("Detection rate")

这是输出:

为什么我的两个条在图表中心合并在一起?有没有办法解决这个问题?

【问题讨论】:

因为你有很多条,R 可能会压缩它们,因为随着条数的增加,它倾向于删除条之间的空间。尝试仅绘制合并的条形图,看看它们是否仍然合并。 请提供一个可重现的示例,包括数据,大概是test 使用dput(test) 或重现问题的较小子集,这将有助于理解和解决问题。 尝试调整geom_bar()的“宽度”参数。 这能回答你的问题吗? Preventing incosistent spacing/bar widths in geom_bar with many bars 【参考方案1】:

您的图形设备无法在现有设置中以足够的分辨率/大小显示,从而无法正确指示所有这些条形之间的间距。您的选择是:

    更改图形输出的分辨率选项。如果在 R studio 中,您可能只能看到“缩放”版本的差异。例如,如果使用ggsave() 并保存一个.png 文件,您可以将dpi= 设置为更大的数字。

    将您的绘图保存为“更高”。如果您使用ggsave() 保存您的绘图,则设置您的宽度和高度以拉伸以显示更多间距。在您的情节中,将高度设置得越来越高,您应该会看到变化。

    设置条形的宽度以使其更窄。您可以使用geom_bar()width= 参数(应该是geom_col(),顺便说一句...)。较小的数字会使条形变细,从而显示它们之间的更多空白。

    重新思考你的情节。如果很难将所有数据干净地放入一个绘图中......请考虑您使用的方法是否实际上是显示绘图数据的最佳方式。您是否希望有人使用此图来比较第 10 根柱线和最后第 7 根柱线之间的差异?这么多条形图真的很难做到,所以……你希望看到这个情节的人理解的总体情况是什么?重新聚焦并重新考虑您的图形,以确保它们清楚地显示您的实验结果。如果您想显示所有条形图,也许可以考虑将它们分组的方式......或设置width=1 并强制它们全部“触摸”。有很多选项取决于您的目标...对于 stackexchange 中的另一个站点来说,这可能是一个很好的问题。

祝你好运。这是一个可重现的示例数据集,其中包含一些图片,向您展示如何利用上面的 1 和 2:

# reproducible example dataset and plot
library(ggplot2)
set.seed(8675309)
df <- data.frame(
  mythings=paste(rep(LETTERS, each = 2), 1:2, sep='-'),
  myvalues=sample(1:100, 26*2, replace=TRUE))

ggplot(df, aes(x=mythings, y=myvalues)) +
  geom_col(fill='steelblue') +
  coord_flip()

这是dpi=100 的设置与width=5height=5 对于我的png 设备的设置。您的里程可能会因您的图形设置而异:

ggsave('a_plot_100_dpi.png', dpi=100, width=5, height=5)

注意你是如何将一些条合并在一起的?当你把它拉伸得更高时会发生这种情况(通过height=10):

ggsave('a_plot_100_dpi_taller.png', dpi=100, width=5, height=10)

线条不见了,但确实很高。要保持相同的纵横比,您可以尝试更高的分辨率。对于这个例子和我的设置,dpi=300 似乎有效:

ggsave('a_plot_300_dpi.png', dpi=300, width=5, height=5)

【讨论】:

chemdork,查看此线程以获得更强大的解决方案。 ***.com/questions/37547223/…

以上是关于在ggplot2中更改条形图轮廓的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2条形图(bar plot)可视化:更改一个条形(bar)的颜色突出一个条形(bar)的颜色

在多彩多姿的分组条形图中更改轮廓的颜色

ggplot2:3路交互堆积条形图的分组条形图

如何在ggplot2中并排条形图上居中标签

为啥我的 ggplot2 条形图不显示大于 0 的 ylim 最小值?

R语言画图-条形图,堆叠条形图(ggplot2)