geom_bar生成别名/失真的x轴刻度文本

时间:2016-10-19 18:01:44

标签: r ggplot2

以下最小示例将问题重现到较小程度......我注意到失真取决于堆叠的数据量,而如果没有堆叠数据,则没有混叠/失真。 y轴刻度文本不会仅影响x轴刻度文本。 x轴刻度文本之间的颜色/粗度差异也非常明显。

library(ggplot2) 

x <- c(1111, 2222, 3333, 1111, 1111, 3333, 3333, 1111, 3333, 1111, 2222, 1111, 3333, 1111, 1111)
y <- c(11, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13, 12, 13)
z <- c('a', 'b', 'c', 'a', 'b', 'a', 'b', 'c', 'a', 'a', 'b', 'c', 'a', 'c', 'a')
df <- data.frame(x, y, z)

g <- ggplot(data=df, aes(x, y, fill=z)) + 
  geom_bar(stat="identity") + scale_x_continuous(breaks=df$x)
g

然后我得到3333轴有些混淆/扭曲,明显比1111和2222更暗:

aliased/distorted 3333

有没有办法对情节进行后处理并修复它?

我尝试过没有成功:

library(extrafont)
ggsave(filename='myplot.pdf', plot=g)
embed_fonts('myplot.pdf')

更新:如果我从breaks=df$x移除scale_x_continuous(breaks=df$x),那么失真就会消失......但我需要休息,否则它不会总是显示每个x轴刻度我需要它。

任何想法如何解决这个问题并保持所有休息而不失真?

1 个答案:

答案 0 :(得分:2)

每次数据发生时,您的休息时间都会相互叠加。这会造成你看到的“失真”。使用unique(df$x)代替df$x作为休息时间轻松解决问题。