R语言进阶——数据展现
传统表格
- 二维结构
- 数字与文字为主
- 缺乏润色
现代信息图
- 以人眼敏感的视觉元素为主
- 信息高度密集
何为美
- 新颖
- 充实
- 高效
- 美感
学习经典
元素周期表
- 元素周期表的天才之处:通过元素的编排组织揭示了元素之间的相互关系以及周期变
化的物理属性
- 蕴含巨大信息量,几乎就是半部化学
- 复杂数据可视化的早期杰作
伦敦地铁图
- Harry Beck的杰作,被收藏在伦敦交通博物馆
- 作者习惯于画电路草图,因此把绘制电路图的习惯带到地铁图中,例如45度和90度的
直线段布局
- 把信息从具体的精确地理位置解放出来,突出了人们和系统里其它位置的逻辑关系。
突出显示了最相关的信息,删除了很多不相关的信息
-公认的杰作,有大量仿制品
美国精选结果图
创建有效可视化的步骤
- 制定问题:所要讲述的故事的主题是什么?故事的主要情节是什么?
- 收集数据:原始数据,数据分析,结果的解析、组织、分组
- 应用一种可视化的形式:基本集合要素包括尺寸、彩色、位置、连线组成网络
问题+可视化数据+场景=故事
- Facebook的故事
R、SAS的那些事儿
数据体系金字塔
R
散点图
- 坐标系里只管地显示样本数据的分布情况
- 一般可以描画2-3变量(维)样本数据,更高维度的可以使用辅助的标识方法,例如面积、颜色、文字等
样本数据:汽车数据集
cars
plot ()函数
plot(cars$dist~cars$speed) #因变量~自变量
> plot(cars$dist~cars$speed, #y~x
+ main = "Relationship between car distance & speed", #画标题
+ xlab = "Speed (miles per hour)", #X坐标轴标题
+ ylab = "Distance travelled (miles)", #Y坐标轴标题
+ xlim = c(0,30), #设置X轴范围为从0到30
+ ylim = c(0,140), #设置Y轴范围从0到140
+ xaxs = "i", #设置X轴风格为internal
+ yaxs = "i", # 设置Y轴风格为internal
+ col = "red", # 设置“散点”的颜色为红色
+ pch = 19) #设置散点的形状为实心圆点
>
internal风格
下载教材代码和数据集
- 访问https://www.packtpub.com/r-graph-cookbook/book
- 注册账号,进入support项即可下载
- 使用时先将工作目录改至数据所在位置
画线图
sales <- read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/dailysales.csv")
> plot(sales$units~as.Date(sales$date,"%d/%m/%y"),
+ type = "l", #指定散点图类型为“ l” 表示画线图
+ main = "Unit Sales in the month of January 2010",
+ xlab = "Date",
+ ylab = "Number of units sold",col = "blue")
lines() 函数
lines(sales$units~as.Date(sales$date,"%d/%m/%y"),col="red")
高水平作图函数与低水平作图函数
- 高水平作图函数:可以独立绘图,例如plot()
- 低水平作图函数:必须先运行高水平作图函数绘图,然后再加绘在已有的图上面
柱形图与barplot()函数
> sales <- read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/citysales.csv",header = TRUE)
> sales
City ProductA ProductB ProductC
1 Seattle 23 11 12
2 London 89 6 56
3 Tokyo 24 7 13
4 Berlin 36 34 44
5 Mumbai 3 78 14
> barplot(sales$ProductA,names.arg = sales$City,col = "black")
barplot(sales$ProductA,names.arg = sales$City,horiz=TRUE,col = "black")
彩色柱状图
barplot(as.matrix(sales[,2:4]),
beside = TRUE, # 使得各个柱体相邻分布
legend = sales$City, #产生右上角的图例
col=heat.colors(5), #产生几种不同的颜色
border = "white")
直方图
直方图和柱形图有什么区别?
柱形图的y轴是数据本身,而直方图的数据集y轴是数据出现的次数
hist(rnorm(1000))
岛屿数据集
islands
- 岛屿直方图
hist(islands)
密度图
plot(density(rnorm(1000)))
类似将直方图中的区间分成无限小……
箱型图
> metals <- read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/metals.csv",header = TRUE)
> boxplot(metals,
+ xlabs="Metals",
+ ylab = "Atmospheric Concentration in ng per cubic metre",
+ main = "Atmospheric Metal Concentrations in London")
详解箱线图
> copper <- read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/copper_site.csv")
> boxplot(copper$Cu~copper$Source,
+ xlab = "Measurement Site",
+ ylab = "Atmospheric Concentration of Copper in ng cubic metre",
+ main ="Atmospheric Copper Concentration in London")
mtcars 数据集
A data frame with 32 observations on 11 variables.
热力图
> heatmap(as.matrix(mtcars),
+ Rowv = NA,
+ Colv = NA,
+ col = heat.colors(256),
+ scale = "column",
+ margins = c(2,8),
+ main = "Car characteristics by Model")
基因热力图
> genes<-read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/genes.csv",header=T)
> rownames(genes)<-colnames(genes)
> image(x=1:ncol(genes),
+ y=1:nrow(genes),
+ z=t(as.matrix(genes)),
+ axes=FALSE,
+ xlab="",
+ ylab="" ,
+ main="Gene Correlation Matrix")
> axis(1,at=1:ncol(genes),labels=colnames(genes),col="white",
+ las=2,cex.axis=0.8)
> axis(2,at=1:nrow(genes),labels=rownames(genes),col="white",
+ las=1,cex.axis=0.8)
鸢尾花数据集
iris
散点图阵
> pairs(iris[,1:4])
> plot(iris[,1:4],
+ main="Relationships between characteristics of iris flowers",
+ pch=19,col="blue",cex=0.9)
图见系列02
在一张花板上画多个散点图
> par(mfrow= c(2,3)) #定义一个画图参数,将一个画板分为2行3列的
> plot(rnorm(100),col = "blue",main="Plot No.1")
> plot(rnorm(100),col = "yellow",main="Plot No.2")
> plot(rnorm(100),col = "green",main="Plot No.3")
> plot(rnorm(100),col = "black",main="Plot No.4")
> plot(rnorm(100),col = "red",main="Plot No.5")
> plot(rnorm(100),col = "orange",main="Plot No.6")
市场数据
> market<-read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/dailymarket.csv",header=TRUE)
> par(mfrow=c(3,1))
> plot(market$revenue~as.Date(market$date,"%d/%m/%y"),
+ type="l", #Specify type of plot as l for line
+ main="Revenue",
+ xlab="Date",
+ ylab="US Dollars",
+ col="blue")
> plot(market$profits~as.Date(market$date,"%d/%m/%y"),
+ type="l", #Specify type of plot as l for line
+ main="Profits",
+ xlab="Date",
+ ylab="US Dollars",
+ col="red")
> plot(market$customers~as.Date(market$date,"%d/%m/%y"),
+ type="l", #Specify type of plot as l for line
+ main="Customer visits",
+ xlab="Date",
+ ylab="Number of people",
+ col="black")
>
增加图例说明
> rain<-read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/cityrain.csv",header=TRUE)
> plot(rain$Tokyo,type="l",col="red",
+ ylim=c(0,300),
+ main="Monthly Rainfall in major cities",
+ xlab="Month of Year",
+ ylab="Rainfall (mm)",
+ lwd=2)
> lines(rain$NewYork,type="l",col="blue",lwd=2)
> lines(rain$London,type="l",col="green",lwd=2)
> lines(rain$Berlin,type="l",col="orange",lwd=2)
#增加图例说明
> legend("topright",
+ legend = c("Tokyo","NewYork","London","Berlin"),
+ col = c("red","blue","green","orange"),
+ lty=1,lwd=2) # 图例说明中线的样式
# 图例说明的另一种样式
> legend("top",
+ legend= c("Tokyo","NewYork","London","Berlin"),
+ ncol = 4,
+ cex = 0.8,
+ bty = "n",
+ col = c("red","blue","green","orange"),
+ lty=1,lwd=2)
地图
- 安装地图包maps
- 用library函数加载
> library(maps)
> map()
小例子及图见系列02
GADM地理数据库
- 安装sp包
- 用library函数加载sp包
library(sp)
load(url("http://gadm.org/data/rda/GBR_adm1.RData"))
spplot(gadm,"Shape_Area")
有点问题mark
输出为图形文件
> png("scatterplot.png") # 定义一个图形文件
> plot(rnorm(1000)) # 画图
> dev.off() # 关闭画图界面
即可在工作目录找到同名图片
输出选项
> png("scatterplot.png",height=600,width = 600) #设定图片长宽
> plot(rnorm(1000))
> dev.off()
> png("scatterplot.png",res=60) #设定图片像素
> plot(rnorm(1000))
> dev.off()
> pdf("sdasd.pdf") #将图片设置为pdf格式
> plot(rnorm(1000))
> dev.off()
画图的参数
颜色的表达
colors() # 查看
使用数值表达颜色
- col=n
- n为当前调色板上的颜色值
- 缺省调色板下,1表示黑色,2表示红色,0表示背景色
- palette()函数观看当前调色板
> palette()
[1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"
改变缺省的调色板
> palette(c("red","blue","green","orange")) #设定调色板的值
> palette()
[1] "red" "blue" "green" "orange"
> palette("default") #恢复默认
> palette()
[1] "black" "red" "green3" "blue" "cyan" "magenta" "yellow" "gray"
十六进制表达颜色
> plot(rnorm(1000),col="#AC5500BB")
以上字串每两位:红色,绿色,蓝色,alpha(透明度)
#查看或混合
> rgb(0.5,0.5,0.5,0.5)
[1] "#80808080"
> rgb(0.5,0.5,0.5,0.2)
[1] "#80808033"
heat.colors() 自动产生颜色的函数
> heat.colors(5)
[1] "#FF0000FF" "#FF5500FF" "#FFAA00FF" "#FFFF00FF" "#FFFF80FF"
直观的调色板控制包RColorBrewer
> library(RColorBrewer)
> display.brewer.all()
> brewer.pal(7,"YlOrRd") #用包里的调色板代替原来的调色板
[1] "#FFFFB2" "#FED976" "#FEB24C" "#FD8D3C" "#FC4E2A" "#E31A1C" "#B10026"
> display.brewer.pal(7,"YlOrRd") #显示
颜色向量:使用多颜色画图
> sales <- read.csv("D:/R_workspace/R_Graphics_Cookbook/Code/Chapter 1/Data Files/citysales.csv")
> barplot(as.matrix(sales[,2:4]),beside=T, #beside=T 循环使用颜色向量
+ legend=sales$City,
+ col=c("red","blue","green","orange","pink"), #设定颜色向量
+ border="white")
> barplot(as.matrix(sales[,2:4]), beside=T,
+ legend=sales$City,
+ col=c("red","blue","green","orange"),
+ border="white")
利用heat.colors()
> barplot(as.matrix(sales[,2:4]), beside=T,
+ legend=sales$City,
+ col=heat.colors(length(sales$City)), #设置与城市个数相同的颜色个数
+ border="white")
利用rainbow()
> barplot(as.matrix(sales[,2:4]), beside=T,
+ legend=sales$City,
+ col=rainbow(length(sales$City)),
+ border="white")
利用terrain.colors()
> barplot(as.matrix(sales[,2:4]), beside=T,
+ legend=sales$City,
+ col=terrain.colors(length(sales$City)),
+ border="white")
其他颜色函数
随机产生颜色
> cm.colors(4)
[1] "#80FFFFFF" "#BFFFFFFF" "#FFBFFFFF" "#FF80FFFF"
> topo.colors(5)
[1] "#4C00FFFF" "#004CFFFF" "#00E5FFFF" "#00FF4DFF" "#FFFF00FF"
设置背景颜色
> par(bg="gray") #设置画图语句
> plot(rnorm(1000))
par的作用知道画板被关闭为止
只设置坐标系内的背景颜色
> points(rnorm(1000))
> plot(rnorm(1000),type="n")
> x<-par("usr") # usr是坐标轴四个角的坐标
> rect(x[1],x[3],x[2],x[4],col="lightgray")
> points(rnorm(1000))
横坐标[- +] 纵坐标[- +]
> x
[1] -38.960000 1039.960000 -3.163467 3.607277
设置标题、坐标轴标号等颜色
> plot(rnorm(1000),
+ main="Plot title",
+ col.axis ="blue", #坐标轴上刻度颜色
+ col.lab="red", #坐标轴上图例颜色
+ col.main="darkblue") #标题颜色
使用par设置
> par(col.axis="red",
+ col.lab="#444444",
+ col.main="darkblue")
> plot(rnorm(100),main="plot")
par()的作用直至下一条par()设置命令,或者重新开一个图形设备.
使用title()函数
> title("Sales Figures for 2010", col.main="blue")
> title(xlab="Month",ylab="Sales",col.lab="red")
> title(xlab="X axis",col.lab="red")
> title(ylab="Y axis",col.lab="blue")
可以覆盖缺省的标题设置
可以用于设置画图参数
字体设置
- Win下能用的字体非常有
- 用par(family=“ serif”,font=2) 设置Times New Roman字体
- font中的表示 0 缺省,1 粗体,2 斜体,3 粗斜体
设置散点的样式
> rain<-read.csv("cityrain.csv")
> plot(rnorm(100),pch=19,cex=2)
pch参数
- 代表散点的符号
- 圆圈
- 三角形
- 加号
- 等等
> rain<-read.csv("cityrain.csv")
> plot(rnorm(100),pch="*",cex=2)
cex参数:控制散点的大小
> plot(rnorm(100),pch=19,cex=1)
> plot(rnorm(100),pch=19,cex=3)
例子
> plot(rain$Tokyo,
+ ylim=c(0,250),
+ main="Monthly Rainfall in major cities",
+ xlab="Month of Year",
+ ylab="Rainfall (mm)",
+ pch=1)
> points(rain$NewYork,pch=2)
> points(rain$London,pch=3)
> points(rain$Berlin,pch=4)
> legend("top",
+ legend=c("Tokyo","New York","London","Berlin"),
+ ncol=4,
+ cex=0.8,
+ bty="n",
+ pch=1:4)
决定线性与宽度
> plot(rain$Tokyo,
+ ylim=c(0,250),
+ main="Monthly Rainfall in major cities",
+ xlab="Month of Year",
+ ylab="Rainfall (mm)",
+ type="l",
+ lty=1,
+ lwd=2)
> lines(rain$NewYork,lty=2,lwd=2)
> lines(rain$London,lty=3,lwd=2)
> lines(rain$Berlin,lty=4,lwd=2)
> legend("top",
+ legend=c("Tokyo","New York","London","Berlin"),
+ ncol=4,
+ cex=0.8,
+ bty="n",
+ lty=1:4,
+ lwd=2) # lwd控制线宽
lty参数:决定线型
0:blank
1:solid(default)
2:dashed
3:dotted
4:dotdash
5:longdash
6:twodash
用bty参数控制坐标系的风格
> par(bty = "l")
> plot(rnorm(100))
> par(bty="7")
> plot(rnorm(100))
> par(bty="c")
> plot(rnorm(100))
> par(bty="u")
> plot(rnorm(100))
box()函数
> par(oma =c(1,1,1,1)) # 设置边缘宽度
> plot(rnorm(100),bty="l")
> box(which = "figure") #将figure区域框起来
设置坐标轴的刻度
> plot(rnorm(100),xaxp=c(0,100,10)) # xaxp 中x坐标轴是0~100,且每隔10设置一个刻度
xaxp与yaxp参数
- 缺省情况下比上限再增加大约4%,并且自动计算刻度
- 可以通过xaxs 来改变上述风格
las参数:刻度数字的方向
> par(mfrow = c(2,2))
> par(las=3)
> plot(rnorm(100),xaxp=c(0,100,10))
> par(las=2)
> plot(rnorm(100),xaxp=c(0,100,10))
> par(las=1)
> plot(rnorm(100),xaxp=c(0,100,10))
> plot(rnorm(100),xaxp=c(0,100,10))
设置画图区域大小
par(fin=c(5,5), #figure区域的大小 5in × 5in
+ pin=c(3,3)) # 画散点区域的大小
mai和omi参数:控制边缘
控制边缘
> par(mai=c(1,1,1,1), omi=c(0.1,0.1,0.1,0.1))
> plot(rnorm(100),xaxp=c(0,100,10))
R画图网站 of good
http://www.stat.auckland. ac.nz/~paul/RGraphics/rgraphics.html
第三章解释边缘