Plot two graphs in same plot in R

前端 未结 16 845
感情败类
感情败类 2020-11-22 03:37

I would like to plot y1 and y2 in the same plot.

x  <- seq(-2, 2, 0.05)
y1 <- pnorm(x)
y2 <- pnorm(x, 1, 1)
plot(x, y1, type = \"l\", col = \"red\")         


        
16条回答
  •  醉酒成梦
    2020-11-22 04:08

    When constructing multilayer plots one should consider ggplot package. The idea is to create a graphical object with basic aesthetics and enhance it incrementally.

    ggplot style requires data to be packed in data.frame.

    # Data generation
    x  <- seq(-2, 2, 0.05)
    y1 <- pnorm(x)
    y2 <- pnorm(x,1,1)
    df <- data.frame(x,y1,y2)
    

    Basic solution:

    require(ggplot2)
    
    ggplot(df, aes(x)) +                    # basic graphical object
      geom_line(aes(y=y1), colour="red") +  # first layer
      geom_line(aes(y=y2), colour="green")  # second layer
    

    Here + operator is used to add extra layers to basic object.

    With ggplot you have access to graphical object on every stage of plotting. Say, usual step-by-step setup can look like this:

    g <- ggplot(df, aes(x))
    g <- g + geom_line(aes(y=y1), colour="red")
    g <- g + geom_line(aes(y=y2), colour="green")
    g
    

    g produces the plot, and you can see it at every stage (well, after creation of at least one layer). Further enchantments of the plot are also made with created object. For example, we can add labels for axises:

    g <- g + ylab("Y") + xlab("X")
    g
    

    Final g looks like:

    enter image description here

    UPDATE (2013-11-08):

    As pointed out in comments, ggplot's philosophy suggests using data in long format. You can refer to this answer in order to see the corresponding code.

提交回复
热议问题