首页 > 解决方案 > 融化后为 4 列构建 ggplot facet 网格

问题描述

我从一张更宽的桌子开始,融化后我把桌子变成了 4 列,如下所示:

      team       DATE     Rank        winning_times
     team1    20180925 place1           1646
     team2    20180925 place1            876
     team3    20180925 place1            601
     team4    20180925 place1            438
     team5    20180925 place1            321
     team1    20180925 place2           1546
     team2    20180925 place2            976
     team3    20180925 place2            501
     team4    20180925 place2            338
     team5    20180925 place2            421
     team1    20180925 place3           2546
     team2    20180925 place3            476
     team3    20180925 place3            501
     team4    20180925 place3            638
     team5    20180925 place3            121
     team1    20180926 place1           1046
     team2    20180926 place1            806
     team3    20180926 place1            61
     team4    20180926 place1            48
     team5    20180926 place1            31
     team1    20180925 place2           1446
     team2    20180925 place2            276
     team3    20180925 place2            201
     team4    20180925 place2            238
     team5    20180925 place2            221 

我的目标是构建一个图,其中 X 轴代表日期,y 轴代表获胜时间,并构建一个 facet_grid 或 facet_wrap。但是当我尝试做 facet_grid 我得到

geom_path: Each group consists of only one observation. Do you need to adjust the group aesthetic?

这也是一个大型数据集,其中每个团队都有 30 天的数据,代表他们获得的每个位置以及获胜时间。

ggplot(data=df.m, 
       aes(x=factor(DATE), y=winning_times, 
           group=Rank,
           shape=team,
           color=team)) + 
  geom_line() + 
  geom_point() +
  scale_x_discrete("DATE") +
  scale_y_continuous("WiningTimes") + 
  facet_grid(Rank ~ team )

标签: rggplot2facet-wrapfacet-grid

解决方案


如果我在您的代码中更改DisplayedTimeswinning_times,我可以创建以下图。

library(ggplot2)

ggplot(data=df.m, 
       aes(x = factor(DATE), y = winning_times, 
           group = Rank,
           shape = team,
           color = team)) + 
  geom_line() + 
  geom_point() +
  scale_x_discrete("DATE") +
  scale_y_continuous("WiningTimes") + 
  facet_grid(Rank ~ team)

在此处输入图像描述

这对我来说看起来不错。

更新

带有直方图的版本。

library(ggplot2)

df.m$DATE <- factor(df.m$DATE)

ggplot(data=df.m, 
       aes(x = winning_times, 
           fill = DATE,
           color = DATE)) + 
  geom_histogram(alpha = 0.5, position = "identity") +
  scale_x_continuous("WiningTimes") +
  facet_grid(Rank ~ team)

在此处输入图像描述

数据

df.m <- read.table(text = "       team       DATE     Rank        winning_times
     team1    20180925 place1           1646
     team2    20180925 place1            876
     team3    20180925 place1            601
     team4    20180925 place1            438
     team5    20180925 place1            321
     team1    20180925 place2           1546
     team2    20180925 place2            976
     team3    20180925 place2            501
     team4    20180925 place2            338
     team5    20180925 place2            421
     team1    20180925 place3           2546
     team2    20180925 place3            476
     team3    20180925 place3            501
     team4    20180925 place3            638
     team5    20180925 place3            121
     team1    20180926 place1           1046
     team2    20180926 place1            806
     team3    20180926 place1            61
     team4    20180926 place1            48
     team5    20180926 place1            31
     team1    20180925 place2           1446
     team2    20180925 place2            276
     team3    20180925 place2            201
     team4    20180925 place2            238
     team5    20180925 place2            221 ",
                  header = TRUE, stringsAsFactors = FALSE)

推荐阅读