r - R ggplot2 geom_tile 同一个图中的几个图
问题描述
我正在研究以下网球数据:
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()
解决方案
诀窍是将数据从宽格式收集到更长的版本,而不是每个变量的列,您有一列指示引用了哪个变量,另一列指示该变量的值。然后图形的语法会为您处理它。
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) - 将所有内容保存在与此处相同类型的长数据框中。
推荐阅读
- javascript - 过滤反应产品页面
- syntax - 如何在主要模式下获取与语法对应的字符
- javascript - Firebase 云功能 - 通过提供的字段名称获取文档
- list - 使用 AppleScript 访问嵌套属性
- postgresql - Postgres 插入/删除触发器
- html - 如何通过 django 用户身份验证数据来响应应用程序?
- java - 比较字符值与字符数组值
- azure - 是否存在不以明文形式保存凭据的 Azure 脚本 API?
- python - 为什么执行 sys.exit() 时 mu-editor 中有这样的退出代码?
- python - 如何使用matplotlib在地图上同一网格点绘制两组数据