R 语言:矩阵或数字 DataFrame 作为以 X 作为列索引的散点图,以及针对 X 绘制的相应行元素
R Language: Matrix or numeric DataFrame as a scatterplot with X as the column indices, and corresponding row elements plotted against X
假设我有一个 8 x 12 矩阵:
> MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
> head(MyMatrix, n = 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 3 5 3 2 4 4 4 3 5 1 2 3
[2,] 5 3 5 2 2 5 2 1 4 4 3 5
[3,] 2 4 3 3 2 2 5 5 2 3 5 3
我想根据 MyMatrix
中存储的元素创建散点图。具体来说,我希望列索引 (1–12) 代表横坐标的值。我想为 x 的每个值绘制相应的行元素。换句话说(考虑上面的 R 输出):
- 对于 x = 1,点绘制在 y = 3, 5, 2, ...,
- 对于 x = 2,点绘制在 y = 5, 3, 4, ...,
- 对于 x = 3,点绘制在 y = 3, 4, 3, ...,
等等。
我同样希望能够使用数据框而不是矩阵来实现相同的目的。每个列向量都根据唯一的 x 值绘制。在这种情况下,我没有说列索引应该代表 x 值,因为我想象可能只想从 DF 中提取列的子集的可能性,因为 DF 不完全由数字组成数据类型,或者只是其他列不相关的情况。在这种情况下,您可以沿 x 轴设置离散类别(例如,每个 "row" 拥有的苹果数量,每个 "row" 拥有的橙子数量),但不一定如此*。例如,它们可以表示时间点(T1、T2、T3 等)。为了绘图的目的,应保留从 DF 中获取的每一列的从左到右的顺序。 (也就是说,交换或移动列并不难。)
*不要陷入这样一个事实,即最终表示(数字或其他)不是模拟的,并且最终在最技术意义上仍然是离散的。
您可以使用 matplot
绘制矩阵 - 请参见第一个示例。
您还可以定义不绘制哪一列 - 请参见第二个示例,其中删除了第三列以进行绘图。
更现代的绘图方式是 ggplot
方式,您可以在其中定义基本绘图,然后逐行添加,如第三个示例所示。
这一切都应该理解为预告片。我建议查看一些文献,例如 R Graphics Cookbook 以进一步阅读。
MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
matplot(MyMatrix, type = 'l')
# if you want to leave the third column out
matplot(MyMatrix[,-3], type = 'l')
# with ggplot
library(ggplot2)
df <- data.frame(MyMatrix)
ggplot(df, aes(x=1:8))+
geom_line(aes(y = X1))+
geom_line(aes(y = X2), color='red') +
geom_line(aes(y = X3), color='green')
假设我有一个 8 x 12 矩阵:
> MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
> head(MyMatrix, n = 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,] 3 5 3 2 4 4 4 3 5 1 2 3
[2,] 5 3 5 2 2 5 2 1 4 4 3 5
[3,] 2 4 3 3 2 2 5 5 2 3 5 3
我想根据 MyMatrix
中存储的元素创建散点图。具体来说,我希望列索引 (1–12) 代表横坐标的值。我想为 x 的每个值绘制相应的行元素。换句话说(考虑上面的 R 输出):
- 对于 x = 1,点绘制在 y = 3, 5, 2, ...,
- 对于 x = 2,点绘制在 y = 5, 3, 4, ...,
- 对于 x = 3,点绘制在 y = 3, 4, 3, ...,
等等。
我同样希望能够使用数据框而不是矩阵来实现相同的目的。每个列向量都根据唯一的 x 值绘制。在这种情况下,我没有说列索引应该代表 x 值,因为我想象可能只想从 DF 中提取列的子集的可能性,因为 DF 不完全由数字组成数据类型,或者只是其他列不相关的情况。在这种情况下,您可以沿 x 轴设置离散类别(例如,每个 "row" 拥有的苹果数量,每个 "row" 拥有的橙子数量),但不一定如此*。例如,它们可以表示时间点(T1、T2、T3 等)。为了绘图的目的,应保留从 DF 中获取的每一列的从左到右的顺序。 (也就是说,交换或移动列并不难。)
*不要陷入这样一个事实,即最终表示(数字或其他)不是模拟的,并且最终在最技术意义上仍然是离散的。
您可以使用 matplot
绘制矩阵 - 请参见第一个示例。
您还可以定义不绘制哪一列 - 请参见第二个示例,其中删除了第三列以进行绘图。
更现代的绘图方式是 ggplot
方式,您可以在其中定义基本绘图,然后逐行添加,如第三个示例所示。
这一切都应该理解为预告片。我建议查看一些文献,例如 R Graphics Cookbook 以进一步阅读。
MyMatrix <- matrix(sample.int(5, 8*12, replace = TRUE), nrow = 8, ncol = 12)
matplot(MyMatrix, type = 'l')
# if you want to leave the third column out
matplot(MyMatrix[,-3], type = 'l')
# with ggplot
library(ggplot2)
df <- data.frame(MyMatrix)
ggplot(df, aes(x=1:8))+
geom_line(aes(y = X1))+
geom_line(aes(y = X2), color='red') +
geom_line(aes(y = X3), color='green')