ggplot2 ggsave pdf透明盒子周围的实线

时间:2017-06-06 15:08:46

标签: r pdf ggplot2

我想比较直方图中的不同峰值,因此我将其中两个放入一个alpha = 0.5的图中。 RStudio中的默认输出看起来很好,但是当我使用pdf()或ggsave()甚至CairoPDF()时,结果输出在框周围有实线。在我的情况下,这些实线在缩放pdf显示时有时看起来很难看。我想禁用这些实线,或者至少让线条与填充颜色/ alpha相同。

最小代码示例:

library(ggplot2)

p1<-ggplot()+
  geom_histogram(data=diamonds[diamonds$cut == "Premium",],aes(x=depth,fill=cut),alpha=0.5)+
  geom_histogram(data=diamonds[diamonds$cut == "Ideal",],aes(x=depth,fill=cut),alpha=0.5)

ggsave("histoline.pdf",p1)

这是输出:

enter image description here

我尝试了各种修改线型和大小的方法,但直到现在还没有成功。

1 个答案:

答案 0 :(得分:-1)

解决方法是手动计算直方图并使用ggplot仅显示相应的多边形。它看起来像我想要的,但当然这是一些额外的代码行,你失去了很多ggplot功能。注意:hist()和geom_hist()对bin宽度的处理方式略有不同。

library(ggplot2)


hP <-hist(diamonds[diamonds$cut == "Premium",]$depth,breaks=seq(43,68,1))
hPd<-data.frame(breaks=c(hP$breaks[-1],hP$breaks),counts=c(hP$counts,hP$counts,hP$counts[1]))
hPd<-hPd[order(hPd$breaks),]

hI <- hist(diamonds[diamonds$cut == "Ideal",]$depth,breaks=seq(43,68,1))
hId<-data.frame(breaks=c(hI$breaks[-1],hI$breaks),counts=c(hI$counts,hI$counts,hI$counts[1]))
hId<-hId[order(hId$breaks),]

p1<-ggplot()+
  geom_polygon(data=hPd,aes(x=breaks,y=counts),fill="blue",alpha=0.5)+
  geom_polygon(data=hId,aes(x=breaks,y=counts),fill="red",alpha=0.5)
  #  this should yield the same binning behaviour as hist()
  #  geom_histogram(data=diamonds[diamonds$cut == "Premium",]
                  #,aes(x=depth),fill="green",binwidth=1,center=0.5,alpha=0.5)

print(p1)

ggsave("histoline.pdf",p1)