【问题标题】:R ggplot2 geom_tile Several graphs in the same plotR ggplot2 geom_tile 同一个图中的几个图
【发布时间】:2020-05-11 06:44:01
【问题描述】:

我正在处理以下网球数据:

library(ggplot2)
library(ggthemes)
library(grid)
library(gridExtra)
library(gtable)

Year<-c(1999:2020)
Player <- rep("Federer",22)
Rank<- c("Q1","3R","3R","4R","4R","W","SF","W","W","SF","F","W","SF","SF","SF","SF","3R",
     "SF","W","W","4R","SF")
Fre<-c("1R","4R","QF","1R","1R","3R","SF","F","F","F","W","QF","F","SF","QF","4R","QF",  
       "A","A","A","SF","NH")
Wim<-c("1R","1R","QF","1R","W","W","W","W","W","F","W","QF","QF","W","2R","F","F","SF",
       "W","QF","F","NH")
US<-c("Q2","3R","4R","4R","4R","W","W","W","W","W","F","SF","SF","QF","4R","SF","F",
       "A","QF","4R","QF","NH")

data <- data.frame(Year, Player, Rank, Fre, Wim,US)
data$Rank <- factor(data$Rank, levels = c("3R","4R","Q1","SF","F","W"))
data$Wim <- factor(data$Wim, levels = c("NH","1R","QF","SF","F","W"))
data$Fre <- factor(data$Fre, levels = c("NH","A","1R","3R","4R","Q1","QF","SF","F","W"))
data$US <- factor(data$US, levels = c("NH","A","3R","4R","Q1","Q2","QF","SF","F","W"))

我想像使用 Rank 一样可视化分类变量 Wim、Fre 和 US,但使用 geom_tile 函数在同一个图中。

只有 Rank 变量的图是这样的:

我用于上一个情节的命令是:

ggplot(data,aes(x=factor(Year),y=Player,fill=Rank)) + 
geom_tile(aes(fill=Rank),color="black", width=0.9,height=0.4) + 
scale_fill_manual(values=c("cornflowerblue","cyan2","aquamarine1","green",
"cyan4","yellow"))+
theme(axis.text.y  = element_text(color="black", size=8, face="bold"),
panel.background = element_rect(fill="white"))+
xlab("Years")+ylab("Tournament")+coord_flip()+  theme_bw()

我想要做的是将另外三个图表放在旁边的同一个图中,其余三个变量和级别的相同颜色加上一些未出现在 Rank 变量中的级别的更多颜色。

我尝试在我的代码中再添加三行,如下所示,但它不起作用。

ggplot(data,aes(x=factor(Year),y=Player,fill=Rank)) + 
geom_tile(aes(fill=Rank),color="black", width=0.9,height=0.4) + 
geom_tile(aes(fill=Fre),color="black", width=0.9,height=0.4) + 
geom_tile(aes(fill=Wim),color="black", width=0.9,height=0.4) + 
geom_tile(aes(fill=US),color="black", width=0.9,height=0.4) + 
scale_fill_manual(values=c("cornflowerblue","cyan2","aquamarine1", 
"green","cyan4","yellow"))+
theme(axis.text.y  = element_text(color="black", size=8, 
face="bold"),
panel.background = element_rect(fill="white"))+
xlab("Years")+ylab("Tournament")+coord_flip()+  theme_bw()

【问题讨论】:

    标签: r ggplot2 plot


    【解决方案1】:

    诀窍是将您的数据从宽格式收集到更长的版本,而不是每个变量的列,您有一列指示引用了哪个变量,另一列指示该变量的值。然后图形的语法为你处理。

    library(tidyr)
    
    data_long <-   gather(data, variable, value, -Year, -Player)
    
    ggplot(data_long, aes(y = factor(Year), x = variable, fill = value)) + 
      geom_tile(color = "white", width = 0.9,height = 0.4)
    

    当然,对于不同级别,您将需要比目前更多的颜色。

    我不知道你打算对更多玩家做什么,但当你获得他们的值时你可能会想要使用 `+ facet_wrap(~Player) - 将所有内容保存在与此处相同类型的长数据框中.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-30
      • 1970-01-01
      • 2010-12-05
      • 2018-04-11
      • 2022-07-23
      • 2014-12-31
      相关资源
      最近更新 更多