pdf使用ggsave可见的零大小元素

时间:2012-01-12 18:05:37

标签: r pdf ggplot2

我遇到的问题是,当保存为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 

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。