R语言数据分析、展现与实例(03)

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风格

这里写图片描述

下载教材代码和数据集

画线图

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参数

  • 代表散点的符号
    1. 圆圈
    2. 三角形
    3. 加号
    4. 等等
> 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
第三章解释边缘
这里写图片描述

边缘

这里写图片描述

维基百科可视化

  • 3
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值