ggplot柱状图中的水平白线

8
当我在R中使用ggplot2和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            

这是我的代码:

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())

使用此方法或使用geom_col()时,当导出为ESP或PDF格式时,我得到的图表如下:

graph using EPS

每列都有细白线。我猜这与它计算每个数据点然后将它们堆叠有关?

如果我使用geom_bar()进行编码,则没有白线,但它不能按照我的想法显示数据。


1
将来请提供一个完全可重现的示例,并删除与您问题无关的绘图方面。例如,所有主题代码都是不相关的。请参见我的答案,了解最小可重现示例的示例。 - Claus Wilke
2个回答

6
当您使用geom_col()时,每个数据值都会生成一个条形段,这就产生了您看到的白色线条。以下示例以夸张的方式展示了此情况。
library(tidyverse)

mtcars %>%
  mutate(cyl = factor(cyl), am = factor(am)) %>%
  ggplot(aes(x = cyl, y = 1, fill = am)) +
  geom_col(color = "white")

最简单的解决方法是手动合并,例如使用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)

reprex包 (v0.3.0) 于2020-09-26创建

注意: geom_col()geom_bar(stat = "identity") 是相同的。


1

您还可以将相同的变量添加到aescolor参数中。 因此,您的aes调用如下:

aes(x = session,y = as.numeric(mice),fill = type,color = type)

您还必须具有相同的填充和颜色比例尺,因此请添加:

scale_color_manual(values = c(“control”=“#37a1c1”,“design1”=“#9ce2cb”,“design2”=“#445a9c”),labels = c(“控制”,“单个等级”,“混合等级”))

ggplot2使用fill参数来填充列/条形图,并使用color参数来着色列/条形图的轮廓。 当您没有指定轮廓颜色时,会出现白线,就像您观察到的那样。 指定相同的轮廓和填充颜色可避免您看到的问题。 如Claus Wilke所建议的那样预聚合在某些情况下有所帮助,但并非总是如此。 例如,如果您有数千种填充颜色,则无论是否预先聚合都会出现白线。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接