在 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 以正确指示所有这些条之间的间距。您的选择是:
更改图形输出的分辨率选项。 如果在 R studio 中,您可能只能看到“缩放”版本的差异。例如,如果使用 ggsave()
并保存 .png 文件,您可以将 dpi=
设置为更大的数字。
将您的绘图保存为“更高”。如果您使用 ggsave()
保存您的绘图,则将宽度和高度设置为拉伸东西出来显示更多的间距。在您的绘图中,将高度设置得更高和更小,您应该会看到变化。
设置条的宽度使它们更细。您可以使用 geom_bar()
的 width=
参数(应该是 geom_col()
,顺便说一句...)。较小的数字会使条形变细,它们之间会显示更多的白色 space。
重新考虑你的情节。如果很难将所有数据清楚地放入一个图中……考虑一下您使用的方法是否实际上是显示绘图数据的最佳方式。您是否希望有人使用此图来比较向下第 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=100
和 width=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)
我使用 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 以正确指示所有这些条之间的间距。您的选择是:
更改图形输出的分辨率选项。 如果在 R studio 中,您可能只能看到“缩放”版本的差异。例如,如果使用
ggsave()
并保存 .png 文件,您可以将dpi=
设置为更大的数字。将您的绘图保存为“更高”。如果您使用
ggsave()
保存您的绘图,则将宽度和高度设置为拉伸东西出来显示更多的间距。在您的绘图中,将高度设置得更高和更小,您应该会看到变化。设置条的宽度使它们更细。您可以使用
geom_bar()
的width=
参数(应该是geom_col()
,顺便说一句...)。较小的数字会使条形变细,它们之间会显示更多的白色 space。重新考虑你的情节。如果很难将所有数据清楚地放入一个图中……考虑一下您使用的方法是否实际上是显示绘图数据的最佳方式。您是否希望有人使用此图来比较向下第 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=100
和 width=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)