在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=5
和height=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)的颜色