R:在特定间隔内绘制pdf

时间:2017-09-05 16:34:38

标签: r ggplot2

我想在一定的时间间隔内绘制概率函数。 x轴必须比间隔长,因为在一个图中有更多的pdf。 但随着x轴的增长,pdf也会产生数据,尽管代码暗示了一定的间隔。 代码:

 p1 <- ggplot() +
 stat_function(data=data.frame(x=c(2,30)),aes(x),fun = dnorm, n = 101, 
 args= list(mean=5,sd=1),color="black")+
 xlim(-5,80)+
 scale_y_continuous(breaks = NULL) 

p1中的pdf生成数据,直到x = 80。但代码中的x值在向量中,直到x = 30。 我怎么能阻止pdf产生值直到80,或者如何成为分布在x = 30时停止的代码?

1 个答案:

答案 0 :(得分:1)

我们可以使用dplyr::data_frame构建一个只有您想要的动态绘制的x值的数据框。我添加了另一个 p.d.f。来证明你想要的方式是可行的。

library(dplyr)
# to use data_frame

ggplot() +
  geom_line(data=data_frame(x=seq(2,30, 0.25), y = dnorm(x, mean = 5, sd = 1)),
            aes(x, y),  color = "black") +
  geom_line(data=data_frame(x=seq(40,70, 0.25), y = dnorm(x, mean = 60, sd = 5)),
            aes(x, y),  color = "red") +
  xlim(-5,80)+
  scale_y_continuous(breaks = NULL) 

enter image description here

更新

您也可以通过移动color=内的aes(...)来标记它们:

ggplot() +
  geom_line(data=data_frame(x=seq(2,30, 0.25), y = dnorm(x, mean = 5, sd = 1)),
            aes(x, y,  color = "mean:5, sd:1")) +
  geom_line(data=data_frame(x=seq(40,70, 0.25), y = dnorm(x, mean = 60, sd = 5)),
            aes(x, y,  color = "mean:60, sd:5")) +
  xlim(-5,80)+
  scale_y_continuous(breaks = NULL) +
  scale_color_manual(values = c("mean:5, sd:1" = "black",
                                "mean:60, sd:5" = "red"))

enter image description here

UPDATE2

你的密度函数对我有用。

dTDF<-function(x,g,a,b,k){
  exp(-exp(-(x/a)+((a*k)/(g-x))-b))*(exp(-(x/a)+((a*k)/(g-x))-b))*((1/a)-((a*k)/((g-x)^2)))
  } 

df1 <- data_frame(x=seq(2500,11300, 100), 
                  y = dTDF(x,g=11263,a=1185, b=-4, k=-0.5))
df2 <- data_frame(x=seq(7000,14300, 100), 
                  y = dTDF(x,g=15263,a=1105, b=-10, k=-0.5))


ggplot() + 
  geom_line(data = df1, aes(x, y))+ 
  geom_line(data = df2, aes(x, y)) +
  xlim(1000, 15000)

enter image description here