【问题标题】:How to Plot Multiple Lines for Each column of a Data Matrix against one Column? [duplicate]如何针对一列为数据矩阵的每一列绘制多条线? [复制]
【发布时间】:2015-05-21 13:45:23
【问题描述】:

对于存储在名为 Results 的对象中的以下 11*8 阶矩阵:

         Delta UE        RE        LS        PT        SP        JS       JS+
SRE0  0.000000  1 3.8730275 2.2721219 1.0062884 1.0047529 1.0317746 1.0318688
SRE1  0.100065  1 2.2478516 2.0595205 1.0502708 1.0453288 1.0436898 1.0764224
SRE2  0.200385  1 1.5838920 1.8793306 1.0359049 1.0437888 1.0529307 1.0753217
SRE3  0.300075  1 0.9129295 1.5360455 0.9946433 1.0320438 1.0063378 1.0654772
SRE4  0.400175  1 0.6434000 1.3150935 0.9530553 1.0172104 1.0107737 1.0564151
SRE5  0.500138  1 0.6063778 1.2876456 0.9455131 1.0165491 0.9994965 1.0553198
SRE6  0.600200  1 0.3710599 0.9537165 0.8730835 0.9945211 0.9346991 1.0369921
SRE7  0.699500  1 0.3312944 0.8793348 0.8535376 0.9914288 0.9046180 1.0314705
SRE8  0.800285  1 0.2338423 0.6966505 0.7831482 0.9657499 0.8445466 1.0169138
SRE9  0.900020  1 0.1665775 0.5328803 0.7024265 0.9296520 0.7989161 0.9850603
SRE10 1.000074  1 0.1550065 0.5047066 0.6849924 0.9231919 0.7765414 0.9821768

我想将该矩阵的最后 7 列与单个图表中的第一列绘制(作为一条线),以便每列具有不同的颜色或不同的线段。名为 Delta 的第一列应放在 X 轴上,而其余列将放在 Y 轴上。

【问题讨论】:

    标签: r matrix ggplot2


    【解决方案1】:

    我的基本想法是将您的Results 对象从宽格式更改为长格式,以传递给ggplot。我喜欢使用 Hadley Wickham 的 reshape2 库。它有一个函数melt,可以适当地堆叠你的数据,然后你可以选择按不同的变量对行进行分组。

    library(reshape2) # install.packages("reshape2")
    
    R = data.frame(Delta = c(1,2), UE = c(1,1), RE = c(3.8, 2.4))
    meltR = melt(R, id = "Delta")
    
    ggplot(meltR, aes(x = Delta, y = value, group = variable, colour = variable)) + 
      geom_line() 
    

    【讨论】:

      【解决方案2】:

      试试:

      matplot(m[,1],m[,-1],type='l')
      

      m 是您的矩阵。

      【讨论】:

        【解决方案3】:

        ggplot2 包可以轻松完成此操作。

        您只需要为每一列设置一个单独的命令。

        从头开始

        Results
                 Delta UE        RE        LS       PT       SP       JS      JS2
        SRE0  0.000000  1 3.8730275 2.2721219 1.006288 1.004753 1.031775 1.031869
        SRE1  0.100065  1 2.2478516 2.0595205 1.050271 1.045329 1.043690 1.076422
        SRE2  0.200385  1 1.5838920 1.8793306 1.035905 1.043789 1.052931 1.075322
        SRE3  0.300075  1 0.9129295 1.5360455 1.994643 1.032044 1.006338 1.065477
        SRE4  0.400175  1 0.6434000 1.3150935 1.953055 1.017210 1.010774 1.056415
        SRE5  0.500138  1 0.6063778 1.2876456 1.945513 1.016549 1.999497 1.055320
        SRE6  0.600200  1 0.3710599 0.9537165 1.873083 1.994521 1.934699 1.036992
        SRE7  0.699500  1 0.3312944 0.8793348 1.853538 1.991429 1.904618 1.031470
        SRE8  0.800285  1 0.2338423 0.6966505 1.783148 1.965750 1.844547 1.016914
        SRE9  0.900020  1 0.1665775 0.5328803 1.702427 1.929652 1.798916 1.985060
        SRE10 1.000074  1 0.1550065 0.5047066 1.684992 1.923192 1.776541 1.982177
        
        class(Results)
        [1] "Matrix"
        

        请注意,我将“JS+”列名转换为“JS2”以避免在 R 上出现错误。

        转换为data.frame

        Results 分配给一个新对象,特别是data.frame

        newResults <- as.data.frame(Results)
        newResults
                 Delta UE        RE        LS       PT       SP       JS      JS2
        SRE0  0.000000  1 3.8730275 2.2721219 1.006288 1.004753 1.031775 1.031869
        SRE1  0.100065  1 2.2478516 2.0595205 1.050271 1.045329 1.043690 1.076422
        SRE2  0.200385  1 1.5838920 1.8793306 1.035905 1.043789 1.052931 1.075322
        SRE3  0.300075  1 0.9129295 1.5360455 1.994643 1.032044 1.006338 1.065477
        SRE4  0.400175  1 0.6434000 1.3150935 1.953055 1.017210 1.010774 1.056415
        SRE5  0.500138  1 0.6063778 1.2876456 1.945513 1.016549 1.999497 1.055320
        SRE6  0.600200  1 0.3710599 0.9537165 1.873083 1.994521 1.934699 1.036992
        SRE7  0.699500  1 0.3312944 0.8793348 1.853538 1.991429 1.904618 1.031470
        SRE8  0.800285  1 0.2338423 0.6966505 1.783148 1.965750 1.844547 1.016914
        SRE9  0.900020  1 0.1665775 0.5328803 1.702427 1.929652 1.798916 1.985060
        SRE10 1.000074  1 0.1550065 0.5047066 1.684992 1.923192 1.776541 1.982177
        
        class(newResults)
        [1] "data.frame"
        

        现在它被格式化为data.frame,这样使用起来会更容易。

        创建线条

        library(ggplot2)
        
        ggplot(data = newResults, aes(x = Delta)) + 
          geom_line(aes(y = UE)) + 
          geom_line(aes(y = RE)) +
          geom_line(aes(y = LS)) +
          geom_line(aes(y = PT)) +
          geom_line(aes(y = SP)) +
          geom_line(aes(y = JS)) +
          geom_line(aes(y = JS2)) +
          labs(y = "") # Delete or change y axis title if desired.
        

        您还可以在每行的aes() 函数中使用color = () 为每行选择自己的颜色。

        【讨论】:

        • 感谢@Dan,这是对我查询的详尽回答。 :)
        • 如何在该图中添加图例?在这个 ggplot2 包中使用普通的 legend 命令等等。
        • 这比简单地使用ggplot 似乎已经设计好的长格式方式要手动得多。 aes 中的 group 参数会自动为您生成一个图例。
        • 非常好! group 参数可以节省大量时间;感谢您提及!
        猜你喜欢
        • 2016-10-28
        • 1970-01-01
        • 2014-12-31
        • 1970-01-01
        • 1970-01-01
        • 2019-01-17
        • 2019-01-27
        • 2017-02-25
        相关资源
        最近更新 更多