当我使用 ggplot2 从 R 保存图形时,geom_col()或者geom_bar(stat = 'identity')它会出现一些难看的水平白线。
数据如下:
> head(mouse_track_data)
session site BM.pile ox.pile type mice skinks geckos
1 dec_2018 1 1 1.10 control FALSE TRUE FALSE
2 dec_2018 1 2 1.12 design1 FALSE FALSE FALSE
3 dec_2018 1 3 1.11 control FALSE FALSE FALSE
4 dec_2018 1 4 1.80 control FALSE FALSE FALSE
5 dec_2018 1 5 1.60 design1 FALSE FALSE FALSE
6 dec_2018 1 6 1.50 control FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
ggplot(data = mouse_track_data, aes(x = session, y = as.numeric(mice), fill = type)) +
geom_bar(stat='identity') +
theme_classic() +
theme(text = element_text(size=15),
axis.text.x = element_text(angle = 45, hjust = 1)) +
xlab("Tracking session") +
ylab("Number of tunnels with mouse tracks") +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 7, b = 0, l = 0))) +
theme(axis.title.y = element_text(margin = margin(t = 0, r = 7, b = 0, l = 0))) +
theme(legend.title = element_blank(), legend.position = c(-2, -2)) +
scale_fill_manual(values = c("control" = "#37a1c1", "design1" = "#9ce2cb", "design2" = "#445a9c"),
labels = c(" Control", " Single grade", " Mixed grade")) +
scale_x_discrete(labels = c('Dec 2019', "April 2019", "Nov 2019", "March 2020")) +
scale_y_continuous(breaks=seq(0, 50, 10), limits = c(0,52), expand = c(0,0)) +
theme(axis.line = element_blank())
Run Code Online (Sandbox Code Playgroud)
有了这个,或者使用geom_col(),当导出为 ESP 或 PDF 时,我得到一个如下所示的图形:
细白线穿过所有的柱子。我认为这与计算每个数据点然后将它们堆积起来有关?
如果我用它编写代码,geom_bar()它不会有白线,但它不会按照我想要的方式显示数据。
当您使用时geom_col(),每个数据值都会获得一个条形段,这会创建白线。下面的例子以夸张的方式展示了这一点。
library(tidyverse)
mtcars %>%
mutate(cyl = factor(cyl), am = factor(am)) %>%
ggplot(aes(x = cyl, y = 1, fill = am)) +
geom_col(color = "white")
Run Code Online (Sandbox Code Playgroud)

最简单的解决方法是手动聚合,例如使用group_by()和summarize():
mtcars %>%
mutate(cyl = factor(cyl), am = factor(am)) %>%
group_by(cyl, am) %>%
summarize(count = n()) %>%
ggplot(aes(x = cyl, y = count, fill = am)) +
geom_col(color = "white")
#> `summarise()` regrouping output by 'cyl' (override with `.groups` argument)
Run Code Online (Sandbox Code Playgroud)

由reprex 包(v0.3.0)于 2020-09-26 创建
注: geom_col()与 相同geom_bar(stat = "identity")。