【问题标题】:R-Plot (Time Series) [closed]R-Plot(时间序列)[关闭]
【发布时间】:2014-07-06 12:49:23
【问题描述】:

我的 csv 文件中有记录组。我想在同一个窗口中为不同的组创建多个不同颜色的图表。例如,我在不同时间点有N1A 的记录,N2 在不同时间点记录B。我想在同一个窗口中有两个红色和绿色的图表。可能吗?是否可以在下面的示例中提供“分组依据”选项(此示例对我来说适用于一组)?

plot(as.Date(Lines$TIMEPOINT), Lines$RESULT_VALUE, xlab="Time In Week.", 
     ylab= "Result Value AT Specific Week.", type='l', col='red')

我看到有不同种类的图表,但这种方法非常简单。提前感谢您的帮助。

=============================> @jbaums, 您的代码在该数据框上运行良好。但是当我在真实环境中尝试如下时,虽然我的结果很好,但两个图的颜色是相同的。我是不是打错字了?我试图以最好的方式修复我的水平,但没有运气!

Input_Data3 <- Input_Data2[,c("BTCH_NBR","TIMEPOINT","RESULT_VALUE")]
plot(Input_Data3[, 2:3], type='n')

sapply(unique(Input_Data3$BTCH_NBR), function(i) {
Input_Data4 <- subset(Input_Data3, BTCH_NBR==i, select=2:3)
points(Input_Data4[order(Input_Data4$TIMEPOINT), ], col=i, type='o', pch=20)
})
legend('bottomright', legend=unique(Input_Data3$BTCH_NBR), bty='n', lty=1,   col=seq_along(unique(Input_Data3$BTCH_NBR)), pch=20)
})

第二个问题是:legand 是红色的,而折线图是粉红色的。任何回应都将受到高度赞赏。

【问题讨论】:

  • 欢迎来到 SO。如果您提供可重现的示例,您更有可能获得有用的反馈。我们不知道您的 Lines$TIMEPOINT 等是什么样的 - 考虑包含一个小样本数据集(例如,编辑您的问题并添加 dput(head(Lines)) 的输出,假设它是一个数据框。
  • ==>1。 Lines - 是从我的输入 csv 文件转换而来的数据框的名称。 ==> 2。 TIMEPOINT - 是包含时间值的列名(以周为单位)。 ==> 3。 RESULT_VALUE - ic 容器在特定时间(特定周)的值。
  • ==>1。 Lines - 是从我的输入 csv 文件转换而来的数据框的名称。 ==> 2。 TIMEPOINT - 是包含时间值的列名(以周为单位)。 ==> 3。 RESULT_VALUE - 是包含容器在特定时间(特定周)的值的列名。 ==> 4。 AS_group - 是关联组名的列名。注意 - 一个组将包含许多记录,我的意思是不同时间间隔的容器(RESULT_VALUE)的不同值。因此,一组图表。
  • ==> as_group timepoint结果_value a 4 696537 A 5 718748 B 4 799355 A 1 805800 C 5 701262 B 1 505800 C 5 701262 B 1 505800 C 5 701262 B 1 505800 C 5 701262 B 1 505800 C 5 701262 B 1 505800 C 5 701262 B 1 805800 C 5 701262 B 1 805800 C 5 701262 B 1 505800 C 5 701262 B 1 531579 A 6 690069 A 6 690068 C 7 718757 B 8 718757 A 2 701768 C 3 820113 C 6 645259
  • 请找出 ("dput(head(Lines))") ===>> > dput(head(Lines)) structure(list(AS_group = structure(c(1L, 1L))的输出, 2L, 1L, 3L, 2L), .Label = c("A", "B", "C"), class= "因子"), TIMEPOINT = c(4L, 5L, 4L, 1L, 5L, 1L ), RESULT_VALUE = c(696537L, 718748L, 799355L, 805800L, 701262L, 531579L)), .Names = c("AS_group", "TIMEPOINT", "RESULT_VALUE"), row.names = c(NA, 6L), class= "data.frame") >

标签: r graph plot time-series


【解决方案1】:

这是一种遍历所有组的方法:

Lines <- structure(list(AS_group = structure(c(1L, 1L, 2L, 1L, 3L, 2L), 
                                         .Label = c("A", "B", "C"), 
                                         class = "factor"), 
                    TIMEPOINT = c(4L, 5L, 4L, 1L, 5L, 1L), 
                    RESULT_VALUE = c(696537L, 718748L, 799355L, 805800L, 
                                     701262L, 531579L)), 
               .Names = c("AS_group", "TIMEPOINT", "RESULT_VALUE" ), 
               row.names = c(NA, 6L), class = "data.frame")

plot(Lines[, 2:3], type='n')
sapply(unique(Lines$AS_group), function(i) {
  Line <- subset(Lines, AS_group==i, select=2:3)
  points(Line[order(Line$TIMEPOINT), ], col=i, type='o', pch=20)
})
legend('bottomright', legend=unique(Lines$AS_group), bty='n', 
       lty=1, col=seq_along(unique(Lines$AS_group)), pch=20)

请注意,在您数据的这个小子集(前 6 行)中,只有一个 C 实例,因此对于该组,仅绘制了一个点,没有线。

有关详细信息,请参阅?plot?for?subset?points?legend

【讨论】:

  • Jbaums,非常感谢您的帮助。我正在寻找完全相同的图表。我测试了你的代码,它运行良好。再次非常感谢您。
【解决方案2】:

如果你的数据是 Lines 并且你有 A 和 B 的组变量,你需要这样的东西:

par(mfrow = c(2,1))
plot(as.Date(Lines$TIMEPOINT[Lines$group == 'A']), Lines$RESULT_VALUE[Lines$group == 'A'], xlab= "Time In Week.", ylab= "Result Value AT Specific Week.", type='l', col='red')
plot(as.Date(Lines$TIMEPOINT[Lines$group == 'B']), Lines$RESULT_VALUE[Lines$group == 'B'], xlab= "Time In Week.", ylab= "Result Value AT Specific Week.", type='l', col='green')

【讨论】:

  • 感谢您的回复。我收到以下错误:==> > plot(as.Date(Lines$TIMEPOINT[Lines$As_group == 'A']), Lines$RESULT_VALUE[Lines$As_group == 'A'], xlab= "Time In Week.", ylab="Result Value AT Specific Week.", type='l', col='red') plot.window(...) 中的错误:需要有限的 'xlim' 值此外:警告消息: 1:在 min(x) 中:min 没有非缺失参数;返回 Inf 2:在 max(x) 中:max 没有非缺失参数;返回 -Inf 3: In min(x) : min 没有非缺失参数;返回 Inf 4:在 max(x) 中:max 没有非缺失参数;返回 -Inf >
  • ==> 现在这个错误消失了。我做了一些错字,产生了上述错误。
  • ==> 是否可以用不同的颜色在单个图中绘制这两个图?
  • 在第二个plot 调用中使用add=TRUE(或将第二个plot 更改为lines)覆盖图。 (不过,我不确定 as.Date 是否真的对您的数据有意义。)
猜你喜欢
  • 2015-06-14
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 1970-01-01
  • 2017-02-24
  • 2019-07-16
  • 2014-09-05
  • 1970-01-01
相关资源
最近更新 更多