//
RColorBrewer包介绍
RColorBrewer包提供了3套很好的配色方案。用户只需要指定配色方案的名称,就可以用包中的brewer.pal()函数生成颜色。这3套配色方案包括:
连续型Sequential(连续的):生成一系列连续渐变的颜色,通常用来标记连续型数值的大小。
离散型Diverging(离散的):生成用深色强调两端、浅色标示中部的系列颜色,可用来标记数据中的离群点。
极端型Qualitative(定性的):生成一系列彼此差异比较明显的颜色,通常用来标记分类数据。
在使用这3套配色方案之前,先要加载RColorBrewer包。
if (!require("RColorBrewer")) {
install.packages("RColorBrewer")
library(RColorBrewer)
}
简单的了解RColorBrewer包
查看所有颜色
display.brewer.all()
三套配色方案用法
seq连续型
共18组颜色,每组分为9个渐变颜色展示。使用渐变色往往能让图形看起来更美观,避免单调的颜色在图形中显得突兀。实现代码如下:
# 显示seq连续型方案中各组颜色的名称和样式
display.brewer.all(type = "seq")
如果想使用YlOrRd组的第3~8种颜色,使用下面的代码实现:
# 可以使用brewer.pal(9,"<某组渐变颜色的名称>")来获取该组颜色的全部九种颜色
# 可以使用brewer.pal(9,"<某组渐变颜色的名称>")[i:j]来获取该组颜色的全部九种颜色中的某几种颜色
barplot(rep(1,6),col = brewer.pal(9,"YlOrRd")[3:8])
div离散型
共9组颜色,每组分为11个渐变颜色展示
# 显示div离散型方案中各组颜色的名称和样式
display.brewer.all(type = "div")
如果想使用BrBG组的第3~8种颜色,使用下面的代码实现:
# 可以使用brewer.pal(11,"<某组渐变颜色的名称>")来获取该组颜色的全部九种颜色
# 可以使用brewer.pal11,"<某组渐变颜色的名称>")[i:j]来获取该组颜色的全部九种颜色中的某几种颜色
barplot(rep(1,6),col = brewer.pal(11,"BrBG")[3:8])
qual极端型
共8组颜色,每组渐变颜色不尽相同
# 显示div离散型方案中各组颜色的名称和样式
display.brewer.all(type = "qual")
如果想使用BrBG组的第3~8种颜色,使用下面的代码实现:
# 可以使用brewer.pal(n,"<某组渐变颜色的名称>")来获取该组颜色的全部九种颜色
# 可以使用brewer.paln,"<某组渐变颜色的名称>")[i:j]来获取该组颜色的全部九种颜色中的某几种颜色
barplot(rep(1,6),col = brewer.pal(12,"Set3")[3:8])
注意
一般的绘图函数会使用col颜色参数,此外,一些元素还可以使用bg参数设置其背景颜色,使用border参数设置其边框颜色,其赋值和col参数一样。
应用示例
boxplot中使用
### Set the display a 1 by 1 grid
par(mfrow=c(1,1))
### Generate random data matrix
rand.data <- replicate(8,rnorm(100,100,sd=1.5))
### Draw a box plot, with each box coloured by the 'Set3' palette
boxplot(rand.data,col=brewer.pal(8,"Set3"))
### 颜色不够用怎么办?扩展颜色
### 使用colorRampPalette可以扩展颜色。
newpalette<-colorRampPalette(brewer.pal(9,"Blues"))(10)
### Generate random data matrix
rand.data <- replicate(10,rnorm(100,100,sd=1.5))
### Draw a box plot, with each box coloured by the 'newpalette' palette
boxplot(rand.data,col=newpalette)
其他绘图函数中使用
### Generate random data matrix
rand.data <- replicate(8,rnorm(100,100,sd=1.5))
### Draw plot of counts coloured by the 'Set3' pallatte
br.range <- seq(min(rand.data),max(rand.data),length.out=10)
results <- sapply(1:ncol(rand.data),function(x) hist(rand.data[,x],plot=F,br=br.range)$counts)
plot(x=br.range,ylim=range(results),type="n",ylab="Counts")
cols <- brewer.pal(8,"Set3")
lapply(1:ncol(results),function(x) lines(results[,x],col=cols[x],lwd=3))
### 实例:个人中心各模块用户点击率
### 以下是某网站个人中心内各个功能模块9月份的页面浏览量。
# 由于组别较多,这里使用条形图来展示数据,并把各功能模块流量的百分比展示在图表中。
pv<-c(29123,279750,89994,15851,61741,119477,75301,65602,75924,37943,11952,34567,11894,42780,18511,9450,1011,1533)
id<-c("我的个人中心","我的订单","退换货办理","海外订单","我的收藏","礼品卡","优惠券","账户余额","会员积分","收货地址","促销信息退订","个人资料","关联账户","账户安全","商品评论","商品提问","邀请方式","邀请记录查询")
col<-c(brewer.pal(9, "YlOrRd")[1:9],brewer.pal(9, "Blues")[1:9])
barplot(pv,col=col,horiz = TRUE,xlim=c(-30000,300000))
title(main=list("个人中心各模块用户点击率",cex=2),sub="时间:2012.9.1-2012.9.30", ylab="个人中心各模块")
text(y=seq(from=0.7,length.out=18,by=1.2),x=-15000,labels=id)
legend("topright",legend=rev(id),pch=15,col=rev(col),ncol=2)
text(labels= paste(round(10000*pv/sum(pv))/100,"%",sep=""),cex=0.7,
y=seq(from=0.7,length.out=18,by=1.2),
x=pv+10000)
在上面的例子中,y轴的尺度标记并未使用axis函数设置,原因在于使用axis函数设置的标记其文字方向是垂直的,这会导致y轴没有充足的空间展示尺度标记。而使用text函数设置的标记文字是水平方式排列的,它并不会占据太多y轴的空间。
paste(round(10000*pv/sum(pv))/100,“%”,sep=“”)命令会把pv数据转化为小数点后2位的百分比字符串,把pv向量c(29123,279750,89994,…)转化为字符串向量c(“2.96%”,“28.48%”,“9.16%” ,…)。
由图可知,用户在使用个人中心系统时主要使用完成购买流程的“我的订单”功能,其次是有关用户虚拟支付资源的礼品卡、优惠券,以及会员积分功能。可见个人中心承载的最核心功能仍然是帮助用户完成购物,其占比可以累积达到50%以上。退换货的pv占了9.16%,可以推测用户在日常登录个人中心后台后的退换货行为比例。
//
//
参考:
http://book.2cto.com/201408/45574.html
本文链接: