首页 > 解决方案 > 如何在R中的同一图中绘制矩阵的几列?

问题描述

我有一个名为 XY 的矩阵,其中包含以下条目:

0   1  1  3
2   4  2  3
4   2  3  5
6   2  5  6

我想(在同一张图中)将第 1 列和第 2 列分别绘制为 x 和 y 轴,将第 3 列和第 4 列分别绘制为 x 和 y 轴。我正在尝试以下代码:

plot(XY[,1],XY[,2],type="l",col="red")
lines(XY[,3],XY[,4],col="green")
points(XY[,1],XY[,2],type="p",col="red")
points(XY[,3],XY[,4],type="p",col="green")

有没有更通用的方法来做这个图而不必重复相同的代码?

谢谢

标签: rggplot2

解决方案


如果您不介意使用ggplot而不是base绘图(鉴于我认为您不使用的标签),您可以这样做:

library(ggplot2)

XY <- data.frame(XY)
colnames(XY)[1:4] <- c(paste0("var",1:4)) 
ggplot(data = XY) +
    geom_point(aes(x = var1, y = var2), color = "red") +
    geom_line(aes(x = var1, y = var2), color = "red") +
    geom_point(aes(x = var3, y = var4), color = "green") +
    geom_line(aes(x = var3, y = var4), color = "green")

列名是一个建议,也许你有更好的变量名

更新

为了有图例,长格式的数据更容易处理。你可以尝试这样的事情:

df <- rbind(
       cbind(XY[,c(1,2)], "group1"),
       cbind(XY[,c(3,4)], "group2")
      )
cols <- colnames(df)

将“group1”“group2”更改为相关的类别名称。

你可以这样绘制:

ggplot(data = df, aes_string(x = cols[1], y = cols[2], col = cols[3])) +
    geom_point() +
    geom_line() +
    labs(color = "My colors")

我之所以使用aes_string,是因为这次引用了列名。


推荐阅读