在 ggplot2 中更改条形图轮廓

Changing barchart outline in ggplot2

我使用 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")

这是输出:

为什么我的两个柱状图在图表中央合并在一起?有办法解决这个问题吗?

您的图形设备无法在现有设置中显示足够的 resolution/size 以正确指示所有这些条之间的间距。您的选择是:

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

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

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

  4. 重新考虑你的情节。如果很难将所有数据清楚地放入一个图中……考虑一下您使用的方法是否实际上是显示绘图数据的最佳方式。您是否希望有人使用此图来比较向下第 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()

这是我的 png 设备的 dpi=100width=5 以及 height=5 的设置。您的里程数可能因图形设置而异:

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)