我遇到的问题是,当保存为pdf时,堆积的条形图顶部会显示不存在的元素的填充颜色。这些元素不会出现在R中的绘图窗口中,也不会保存为png。
示例:
library(ggplot2)
dat <- data.frame(prop.table(xtabs(~class+cyl,mpg),1))
qplot(class,Freq,data=dat,geom="bar",fill=relevel(cyl,4))+scale_fill_brewer(palette="Blues")
ggsave("test.pdf")
在“2seater”列的顶部出现一条细的深蓝色线条,无论你放大多少,它在屏幕上看起来都保持相同的厚度。我认为这是一个pdf错误,而不是ggplot2错误,但有什么方法可以避免这种情况吗?
修改
> sessionInfo()
R version 2.12.2 (2011-02-25)
Platform: i386-pc-mingw32/i386 (32-bit)
locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252
attached base packages:
[1] grid stats graphics grDevices utils datasets methods
[8] base
other attached packages:
[1] ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4 plyr_1.6
loaded via a namespace (and not attached):
[1] digest_0.5.0 RColorBrewer_1.0-5 tools_2.12.2
答案 0 :(得分:2)
问题似乎是由于class*cylynder
组合具有零频率,如此处显示的数据框中的第一行:
library(ggplot2)
dat <- data.frame(prop.table(xtabs(~class+cyl,mpg),1))
head(dat, 3)
# class cyl Freq
# 1 2seater 4 0.0000000
# 2 compact 4 0.6808511
# 3 midsize 4 0.3902439
如果删除带有Freq==0
的行,然后绘图,则有问题的行会消失:
dat2 <- subset(dat, Freq>0)
qplot(class, Freq, data=dat2, geom="bar", fill=relevel(cyl,4)) +
scale_fill_brewer(palette="Blues")
ggsave("test.pdf")
答案 1 :(得分:1)
我遇到同样的问题(在Linux上):直方图中的零值在pdf查看器中显示为黑色细线。
我可以使用cairo_pdf()
代替pdf()
来保存,部分解决此问题。
与Sumatra或Evince一起显示它不再显示,但在PDF X-change Viewer中它仍然存在。这也适用于您的示例代码。
编辑:使用tikzDevice解决了所有观看者的问题。然后,人们仍然可以使用pdflatex等创建pdf。