这篇Learning R博客文章展示了如何使用ggplot2制作篮球统计数据的热图。完成的热图如下所示:
我的问题(受Jake在Learning R博客上评论的启发)是:对于不同类别的属性(进攻、防守、其他),是否可以使用不同的渐变颜色
首先,从文章中重新创建图形,并将其更新为更新版本(0.9.2.1)的ggplot2,该版本具有不同的主题系统并附加较少的软件包:
nba<;-read.csv(“http://datasets.flowingdata.com/ppg2008.csv")
nba$Name<;-带(nba,重新订购(名称,PTS))
图书馆(“ggplot2”)
图书馆(“plyr”)
图书馆(“重塑2”)
图书馆(“天平”)
nba.m<;-熔化(nba)
nba.s<;-ddply(nba.m、(变量)、变换、,
重新缩放=比例(值))
ggplot(nba.s,aes(变量,名称))+
geom_瓷砖(aes(填充=重新缩放),颜色=“白色”)+
比例填充梯度(低=“白色”,高=“钢蓝色”)+
比例x离散(“,扩展=c(0,0))+
比例y离散(“,扩展=c(0,0))+
主题灰(基本尺寸=9)+
主题(legend.position=“无”,
axis.ticks=元素_blank(),
axis.text.x=元素\文本(角度=330,hjust=0))
为不同的类别使用不同的渐变颜色并不是那么简单。将填充映射到交互(重缩放,类别)(其中类别为攻击性/防御性/其他;见下文)的概念方法不起作用,因为因子和连续变量交互会产生一个离散变量,填充
解决这个问题的方法是人为地进行这种交互,将重新缩放映射到不同类别值的非重叠范围,然后使用缩放填充梯度n将这些区域映射到不同的颜色梯度
首先创建类别。我认为这些都与评论中的一致,但我不确定;更改哪个变量属于哪个类别很容易
nba.s$Category<;-nba.s$变量
级别(nba.s$类别)<;-
名单(“攻击性”=c(“临时秘书处”、“女性生殖器切割”、“女性生殖器切割”、“女性生殖器切割”、“X3PM”、“X3PA”、“AST”),
“防御性”=c(“DRB”、“ORB”、“STL”),
“其他”=c(“G”、“最小”、“FGP”、“FTM”、“FTA”、“FTP”、“X3PP”,
“TRB”、“BLK”、“TO”、“PF”))
由于rescale在0的几个(3或4)范围内,不同的类别可以偏移100以保持它们的独立性。同时,根据重缩放值和颜色,确定每个颜色渐变的端点应该在哪里
nba.s$rescalecoffset<;-nba.s$重新缩放+100*(作为数字(nba.s$类别)-1)
刻度线<;-范围(nba.s$重新缩放)
gradientends<;-标尺长度+代表(c(0100200),每个=2)
colorends<;-c(“白色”、“红色”、“白色”、“绿色”、“白色”、“蓝色”)
现在将fill变量替换为rescalecoffset,并将fill比例更改为使用scale\u fill\u gradientn(记住重新缩放值):
ggplot(nba.s,aes(变量,名称))+
geom_瓷砖(aes(填充=重新缩放偏移),颜色=“白色”)+
缩放\填充\渐变n(颜色=颜色端点,值=重新缩放(渐变端点))+
比例x离散(“,扩展=c(0,0))+
比例y离散(“,扩展=c(0,0))+
主题灰(基本尺寸=9)+
主题(legend.position=“无”,
axis.ticks=元素_blank(),
axis.text.x=元素\文本(角度=330,hjust=0))
重新排序以获得相关的统计数据是reorder函数对各种变量的另一个应用:
nba.s$variable2<;-重新排序(nba.s$变量,如.numeric(nba.s$类别))
ggplot(nba.s,aes(变量2,名称))+
geom_瓷砖(aes(填充=重新缩放偏移),颜色=“白色”)+
缩放\填充\渐变n(颜色=颜色端点,值=重新缩放(渐变端点))+
比例x离散(“,扩展=c(0,0))+
比例y离散(“,扩展=c(0,0))+
主题灰(基本尺寸=9)+
主题(legend.position=“无”,
axis.ticks=元素_blank(),
axis.text.x=元素\文本(角度=330,hjust=0))