r - 具有时间点的分箱纵向数据的意大利面条图

标签 r plot ggplot2

我有一个包含纵向数据的数据框,如下所示

test

    Names     hr1    hr2    hr3    hr4      workhr_bin
      41     80     76     70     60               7
      42     80     74     75     NA               8
      43     85     NA     60     65               6
      44     NA     NA     NA     60               3
      45     80     70     NA     NA               8
      46     NA     NA     NA     60               3

hr1hr2hr3hr4 的变量包括按重复时间间隔报告的服务时间“名称”栏下的主题。 “workhr_bin”列包括使用分位数函数获得的 bin。总共有 10 个垃圾箱,比例为 1:10。

我正在尝试生成多个由垃圾箱组成的小时意大利面图。本质上它应该产生 10 个图,一个图用于 bin 1 中的数据,另一个图用于数据箱 2 等。

我尝试这样做:

head(melt(test[,c(2:6)]))

但是我最终得到了 workhr_bin 变量,取而代之的是一个像这样的文件:

  variable value
1   hours1    80
2   hours1    80
3   hours1    85
4   hours1    NA
5   hours1    80
6   hours1    NA

我也尝试过

melt(test, id.var = "Names")

最终我的 workhr_bin 变量也消失了

   Names variable value
    41   hr1      80.00
    42   hr1      80.00
    43   hr1      85.00

我尝试使用latticeggplot2,但由于某种原因,我无法将数据转换为正确的格式来生成代表每个箱内样本的意大利面条10图。

本质上我需要一个数据框:

Names    variable     value    workhr_bin
    41   hr1      80.00             7
    42   hr1      80.00             8
    43   hr1      85.00             6

然后我希望能够创建一个在 x.axis 上带有“变量”的 bin-faceted 多色意大利面图(由 hr1hr2hr3, hr4) 以及 y 轴上相应的“值”。 enter image description here

最佳答案

您应该研究reshape2::melt的文档。

DF <- read.table(text="    Names     hr1    hr2    hr3    hr4      workhr_bin
      41     80     76     70     60               7
      42     80     74     75     NA               8
      43     85     NA     60     65               6
      44     NA     NA     NA     60               3
      45     80     70     NA     NA               8
      46     NA     NA     NA     60               3", header=TRUE)

library(reshape2)
DF_melt <- melt(DF, id.vars=c("Names", "workhr_bin"))
#make time numeric
DF_melt$variable <- as.numeric(gsub("hr", "", DF_melt$variable))

library(ggplot2)
p <- ggplot(DF_melt, aes(x=variable, y=value, color=factor(Names))) +
  geom_line() +
  geom_point() +
  facet_grid(workhr_bin ~ .)

print(p)

(这会导致 ggplot2 发出警告,因为没有足够的数据。我假设您的真实数据集不会出现此问题。)

关于r - 具有时间点的分箱纵向数据的意大利面条图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20393448/

相关文章:

r - 如何以图例结尾创建单个几何点的几何线图

r - ggplot2 和 geom_point 的图例

r - 为命名字段具有MAX值的数据框行提取索引

r - 在多行的单列中查找最大日期

r - GGPLOT - 如何根据预定义标签区分线并在 x 轴上添加文本

python - 从一个 python 文件调用多个绘图函数时出现问题

r - 在 R 中计算实验设计的效率

r - 如何重新排列两个数据帧之间的匹配顺序

python - 绘制曲线并根据每个点的值和定制的颜色图为其着色

r - knit 与 gganimate,找不到 ffmpeg 命令