【问题标题】:How can one plot the rows of a two dimensional array in one plot using ggplot2?如何使用 ggplot2 在一个图中绘制二维数组的行?
【发布时间】:2017-05-08 14:42:50
【问题描述】:

我有一个类似于以下的数据矩阵,我想要一个其行的重叠图(即每行一个图,并且所有图都重叠)。

90   60   58   82   66   68   66   54   64   56   70   66   64   66   56   70   64   82   64   58   66   72   56   66   56   58   58   50   62   58   60   68   64   58   60   62   76   88   70   60   60   60   60   
30   56   56   30   62   40   62   42   68   74   38   64   52   56   38   66   56   74   58   62   62   56   40   38   76   60   74   58   64   70   28   76   40   56   56   
26   32   28   58   62   58   38   64   58   62   60   48   50   62   62   46   58   62   60   62   72   56   62   48   64   46   62   62   64   64   40   68   28   54   72   64   62   
60   42   54   46   46   48   56   46   50   44   46   52   36   36   32   48   34   46   44   46   46   48   54   54   54   52   50   50   44   52   56   68   72   62   64   
24   40   58   28   42   70   36   44   46   38   40   38   54   40   48   38   44   36   48   74   74   60   84   76   42   42   28   48   52   82   28   54   28   42   88   62   
60   84   78   56   56   60   68   48   62   60   64   58   60   60   64   68   64   46   66   64   44   54   58   62   52   68   62   56   48   54   72   74   66   84   74   
16   38   32   70   28   38   30   56   40   34   42   44   32   28   30   40   30   40   34   32   46   30   40   54   50   28   34   34   62   46   38   36   54   32   40   58   66   54   54   44   
50   56   78   70   72   44   42   42   74   38   56   46   76   46   48   42   54   70   34   42   26   62   32   42   74   54   36   46   42   54   46   54   52   52   78   74   78   78   
94   90   100   88   54   88   60   90   78   92   44   94   96   74   84   90   88   84   68   92   88   94   88   82   64   58   76   78   48   66   92   84   76   76   76   94   
60   68   66   62   62   60   40   56   62   54   50   48   56   64   56   54   52   46   40   54   48   54   66   62   44   58   52   60   68   50   74   62   52   44   48   62   62   
18   34   70   38   22   34   40   48   36   52   34   30   36   60   54   60   40   36   32   46   48   36   32   68   50   52   60   52   52   64   70   30   40   72   64   74   64   
42   46   44   76   72   40   34   34   40   32   42   44   66   36   46   74   40   28   40   34   42   64   32   44   40   62   42   38   44   70   46   46   48   46   38   46   46   46   46   46   46   46   
36   54   66   40   64   50   58   54   72   46   64   56   62   64   58   54   54   62   62   56   54   62   62   58   62   60   64   48   50   62   74   62   48   52   64   66   66   66   
34   42   66   48   60   66   42   52   68   64   66   44   30   56   64   42   48   60   74   34   62   48   50   42   50   74   72   68   44   72   58   44   30   64   60   62   64   64   78   64   

结果看起来像这样,但有许多不同的曲线:

我确实知道how to overlay plots of a few different datasets 使用 ggplot2,但我的数组大约有 20 行,因此一一绘制它们会很麻烦。所以我正在寻找一种方法来告诉 ggplot2 一次绘制所有行。

【问题讨论】:

  • 您好,您能否添加一些数据并准确说明预期结果是什么?
  • 嗨,我照你说的做了。
  • 如果我理解您需要在同一图表上的每行绘制一个线图?

标签: r plot ggplot2


【解决方案1】:

如果没有可重复的示例,这有点难以回答。我假设您需要在同一个图表上绘制多条线,并且每条线的 y 值对应于您显示的数据的每一行上的值。第一个问题是你的行长度不一样,所以我创建了一个数据框,你的数据在未提供数据时添加了 NA:

df <- data.frame(c(90,60,58,82,66,68,66,54,64,56,70,66,64,66,56,70,64,82,64,58,66,72,56,66,56,58,58,50,62,58,60,68,64,58,60,62,76,88,70,60,60,60,60),
                  c(30,56,56,30,62,40,62,42,68,74,38,64,52,56,38,66,56,74,58,62,62,56,40,38,76,60,74,58,64,70,28,76,40,56,56,NA,NA,NA,NA,NA,NA,NA,NA),
                  c(26,32,28,58,62,58,38,64,58,62,60,48,50,62,62,46,58,62,60,62,72,56,62,48,64,46,62,62,64,64,40,68,28,54,72,64,62,NA,NA,NA,NA,NA,NA),
                  c(60,42,54,46,46,48,56,46,50,44,46,52,36,36,32,48,34,46,44,46,46,48,54,54,54,52,50,50,44,52,56,68,72,62,64,NA,NA,NA,NA,NA,NA,NA,NA),
                  c(24,40,58,28,42,70,36,44,46,38,40,38,54,40,48,38,44,36,48,74,74,60,84,76,42,42,28,48,52,82,28,54,28,42,88,62,NA,NA,NA,NA,NA,NA,NA),
                  c(60,84,78,56,56,60,68,48,62,60,64,58,60,60,64,68,64,46,66,64,44,54,58,62,52,68,62,56,48,54,72,74,66,84,74,NA,NA,NA,NA,NA,NA,NA,NA),
                  c(16,38,32,70,28,38,30,56,40,34,42,44,32,28,30,40,30,40,34,32,46,30,40,54,50,28,34,34,62,46,38,36,54,32,40,58,66,54,54,44,NA,NA,NA),
                  c(50,56,78,70,72,44,42,42,74,38,56,46,76,46,48,42,54,70,34,42,26,62,32,42,74,54,36,46,42,54,46,54,52,52,78,74,78,78,NA,NA,NA,NA,NA),
                  c(94,90,100,88,54,88,60,90,78,92,44,94,96,74,84,90,88,84,68,92,88,94,88,82,64,58,76,78,48,66,92,84,76,76,76,94,NA,NA,NA,NA,NA,NA,NA),
                  c(60,68,66,62,62,60,40,56,62,54,50,48,56,64,56,54,52,46,40,54,48,54,66,62,44,58,52,60,68,50,74,62,52,44,48,62,62,NA,NA,NA,NA,NA,NA),
                  c(18,34,70,38,22,34,40,48,36,52,34,30,36,60,54,60,40,36,32,46,48,36,32,68,50,52,60,52,52,64,70,30,40,72,64,74,64,NA,NA,NA,NA,NA,NA),
                  c(42,46,44,76,72,40,34,34,40,32,42,44,66,36,46,74,40,28,40,34,42,64,32,44,40,62,42,38,44,70,46,46,48,46,38,46,46,46,46,46,46,46,NA),
                  c(36,54,66,40,64,50,58,54,72,46,64,56,62,64,58,54,54,62,62,56,54,62,62,58,62,60,64,48,50,62,74,62,48,52,64,66,66,66,NA,NA,NA,NA,NA),
                  c(34,42,66,48,60,66,42,52,68,64,66,44,30,56,64,42,48,60,74,34,62,48,50,42,50,74,72,68,44,72,58,44,30,64,60,62,64,64,78,64,NA,NA,NA))

# rename columns
colnames(df) <- 1:14
# reshape dataframe to have only one value column
library(reshape)
df <- melt(df)
# create a x vector from 1 to the number of value for each variable (here 43)
df$x <- rep(1:length(df$value[df$variable==1]))

# Use the dataframe in ggplot
ggplot(data=df, aes(x=x, y=value, color=variable)) +
  geom_line()

给出以下情节:

【讨论】:

  • 为了节省一些输入,可以使用as.data.frame(the_matrix)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-17
  • 2021-10-13
  • 1970-01-01
  • 1970-01-01
  • 2019-02-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多