我使用ggplot2使用以下代码绘制具有两个密度的直方图:
ggplot(khstat_wide, aes(x=khstat_vorher)) + geom_histogram(aes(y=..density..),binwidth=200) +
ylim(0,0.004) + xlim(0,10000) + scale_colour_brewer(palette="Dark2") +
stat_function(fun = dtweedie, aes(colour = 'Tweedie'), args = list(xi=round(out3$p.max,4), mu=mean(khstat_wide$khstat_vorher),phi=out3$phi.max)) +
theme(title=element_text(size=14),axis.text=element_text(size=12), legend.text=element_text(size=12),
legend.position=c(.85,.85), legend.title=element_blank()) +
stat_function(fun = dgamma, aes(colour = 'Gamma' ), args = list(shape=1.199157e-01, scale=1.138242e+04 ))
请注意,我设置了ylim(0,0.004) + xlim(0,10000)
但这样做会更改直方图的比例,因为省略了超出此范围的值。
这是与coord_cartesian(ylim=c(0,0.004),xlim=c(0,5000))
相同的情节,但现在密度线看起来真实“前卫”:
我怎样才能让它们再次光滑?
更新:
很难建立一个可重复的例子,这是一个尝试:
a <- rgamma(500, shape=0.5)
b <- rep(0,300)
df <- data.frame(V1=c(a,b), V2=0)
工作的:
ggplot(df, aes(x=V1)) + geom_histogram(aes(y=..density..),binwidth=200) +
ylim(0,0.01) + xlim(0,1000) + scale_colour_brewer(palette="Dark2") +
stat_function(fun = dgamma, aes(colour = 'Gamma' ), args = list(shape=1.199157e-01, scale=1.138242e+04 ))
不起作用:
ggplot(df, aes(x=V1)) + geom_histogram(aes(y=..density..),binwidth=200) +
scale_colour_brewer(palette="Dark2") +
stat_function(fun = dgamma, aes(colour = 'Gamma' ), args = list(shape=1.199157e-01, scale=1.138242e+04 )) +
coord_cartesian(ylim=c(0,0.01),xlim=c(0,1000))
答案 0 :(得分:0)
这解决了我的问题。
首先,创建原始图表的对象
p <- ggplot(df, aes(x=V1)) + geom_histogram(aes(y=..density..),binwidth=200) +
scale_colour_brewer(palette="Dark2") +
stat_function(fun = dgamma, aes(colour = 'Gamma' ), args = list(shape=1.199157e-01, scale=1.138242e+04 )) +
ylim(0,0.01) + xlim(0,1000)
现在将coord_cartesian()
与您想要的限制一起使用
p + coord_cartesian(ylim=c(0,0.01),xlim=c(0,500))