R-使用ggplot创建断层图

时间:2018-11-12 17:56:36

标签: r ggplot2

我有以下图形:

set.seed(123456)
test1_1 <- round(rnorm(20,mean=40,sd=5),0)/100
test1_2 <- round(rnorm(20,mean=60,sd=5),0)/100
test.data <- as.data.frame(cbind(test1_1,test1_2))
test <- ggplot(test.data, aes(test1_1,test1_2))+
  geom_point()+
  scale_y_continuous(limits = c(0, 1)) +
  scale_x_continuous(limits = c(0, 1)) +   # OP missing `+`
  abline(0.5,0.5)
test

现在我有了要点,它是使用以下公式创建的:

line <- function(beta_2, test1_1,test1_2){
beta_1 = (test1_2/(1-test1_1))-(test1_1/(1-test1_1))*beta_2
return(beta_1)}


  output1 <- as.data.frame(matrix(0,20,1))
  beta_2 <- 1
  for (i in 1:nrow(test.data)){
    output1[i,] <- line(beta_2,test.data[i,1],test.data[i,2])
  }

  output2 <- as.data.frame(matrix(0,20,1))
  beta_2 <- 0
  for (i in 1:nrow(ei.data)){
    output2[i,] <- line(beta_2,test.data[i,1],test.data[i,2])
  }

  output <- cbind(output1,output2)

我想将第二个数据框中的数据添加为上面创建的图中的线(始终将每一行的点连接起来)。但是,使用

abline(output[1,1],output[1,2])

不起作用。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

abline()是基于R的语法,对于ggplot2,您需要使用geom_abline(output [1,1],output [1,2])

ggplot(test.data, aes(test1_1,test1_2)) + 
geom_point()+
scale_y_continuous(limits = c(0, 1))+
scale_x_continuous(limits = c(0, 1)) + 
geom_abline(slope = output[1,1],intercept = output[1,2])

注意:您的可复制对象有一个错误,其中使用ei.data而不是test.data,并且您的ggplot调用的一部分缺少+号,我只是指出这一点,以便其他人(或您)不会被抓住在没有意识到的情况下出现单独的错误。