基本图形的绘制
在R语言(01)中,最后的一个综合训练,我们生成了一部分数据,现在我们就用这些数据为例,来展示R是如何绘制一些图表的。
数据的导入
通过读取数据文件,我们可以导入之前产生的数据。
1
2
3
4
5
6
7
8
9
10
11
12
13> x=read.table("mark.txt",header=F)
> x
V1 V2 V3 V4
1 10378001 99 73 98
2 10378002 86 95 90
3 10378003 98 85 84
4 10378004 90 81 100
5 10378005 81 88 96
6 10378006 99 63 61
7 10378007 88 79 100
8 10378008 88 92 95
9 10378009 91 91 100
...
其中V1列是学好,V2是均匀分布的成绩数据,V3和V4是正太分布的数据,其中V4对超过100的数据取100。
直方图分析 hist()
绘制直方图函数hist()
1> hist(x$V2)
1> hist(x$V3)
1> hist(x$V4)
散点图 plot()
散点图绘制函数plot()
1> plot(x$V1,x$V2)
柱状图barplot()
列联函数table(),柱状图绘制函数barplot()
1
2
3
4
5
6
7> table(x$V2)
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
1 5 7 3 3 4 6 8 7 4 7 8 4 4 5 2 6 2 4 8
100
2
> barplot(table(x$V2))
饼图 pie()
饼图绘制函数pie()
1> pie(table(x$V2))
箱尾图箱子的上下横线为样本的25%和75%分为数
箱子中间的横线为样本的中位数
上下延伸的直线称为尾线,尾线的尽头为最高值和最低值
异常值是箱外部的个别与大多数样本相距很远的样本数据
1> boxplot(x$V2,x$V2,x$V3)
1> boxplot(x[2:4],col=c("red","green","blue"),notch=T)
x[2:4] 是值第2到4列
col=c(“red”,”green”,”blue”) 分别指定每个箱尾图的颜色
notch=T 是控制中间的缺口的 主要是让用户更清楚的看到中位线
水平放置的箱尾图
1> boxplot(x$V2,x$V2,x$V3,horizontal=T)
horizontal=T 设置水平显示
星相图 stars()每个观测单位的数值表示为一个图形
每个图的每个角表示一个变量,字符串类型会标注在图的下方
角线的长度表达值的大小
1> stars(x[c("V2","V3","V4")])
星相图另一种表示:雷达图
1> stars(x[c("V2","V3","V4")],full=T,draw.segment=T)
人脸图用五官的宽度和高度来描绘数值
人对脸谱高度敏感和强记忆
适合较少样本的情况
安装aplpack包
1
2> require("aplpack")
> faces(x[c("V2","V3","V4")])
其它脸谱图
安装TeachingDemos包
1
2> require("TeachingDemos")
> faces2(x)
茎叶图 stem()1
2
3
4
5
6
7
8
9
10
11
12> stem(x$V3)
The decimal point is 1 digit(s) to the right of the |
6 | 0233
6 | 88
7 | 000111222333333
7 | 55556677888888888999999999
8 | 0000011111112223333333444444
8 | 5556666788888899
9 | 001224
9 | 559
6 | 0233 代表60,62,63,63四个样本数据.茎叶图没有图像输出,是一种高密集型的数据展现形式。
QQ图可用于判断是否正态分布(服从正态分布的点基本都处于同一直线)
直线的斜率是标准差,截距是均值
点的散布越接近直线,则越接近正态分布
1> qqnorm(x$V2)
1> qqline(x$V2)
x$V3 数据服从正态分布,点基本都处于同一直线上:
1> qqnorm(x$V3)
1> qqline(x$V3)
图形绘制进阶
散点图进一步设置
在mac上绘图时显示中文,需要安装以下安装包:
showtext
showtextdb
sysfonts
1
2
3
4> library(sysfonts)
> library(showtext)
> dev.new() #如果已打开图形设备,本句可以不用
> showtext.begin()
加入这几句之后,绘制的图像中就可以正常显示中文了。
1
2
3
4
5
6
7
8
9
10> plot(x$V2,x$V3,
main="数学分析与线性代数成绩的关系",
xlab="数学分析",
ylab="线性代数",
xlim=c(0,100),
ylim=c(0,100),
xaxs="i", #Set x axis style as internal
yaxs="i", #Set y axis style as internal
col="red", #Set the color of plotting symbol to red
pch=19) #Set the plotting symbol to filled dots
连线图1
2
3> a=c(2,3,4,5,6)
> b=c(4,7,8,9,12)
> plot(a,b,type="l")
type=”l” 代表想字母”l”一样,是折现。
密度图 density()
函数density()
1> plot(density(rnorm(1000)))
R中的内置数据集
在R中输入data可查看内置数据集:
1data()
热力图 heatmap()
利用内置的mtcars数据集绘制
1
2
3
4
5
6
7> heatmap(as.matrix(mtcars),
Rowv=NA,
Colv=NA,
col=heat.colors(256),
scale="column",
margins=c(2,8),
main="Car characteristics by Model")
Iris(鸢尾花)数据集Sepal花萼
Petal花瓣
Species种属
这是一个非常著名的数据集,Iris也称鸢尾花卉数据集,是一类多重变量分析的数据集。通过花萼长度,花萼宽度,花瓣长度,花瓣宽度4个属性预测鸢尾花卉属于(Setosa,Versicolour,Virginica)三个种类中的哪一类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14> iris
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
7 4.6 3.4 1.4 0.3 setosa
8 5.0 3.4 1.5 0.2 setosa
9 4.4 2.9 1.4 0.2 setosa
10 4.9 3.1 1.5 0.1 setosa
11 5.4 3.7 1.5 0.2 setosa
...
向日葵散点图 sunflowerplot()用来克服散点图中数据点重叠问题
在有重叠的地方用一朵“向日葵花”的花瓣数目来表示重叠数据个数
1> sunflowerplot(iris[,3:4],col="gold",seg.col="gold")
散点图集遍历样本中全部的变量配对画出二元图
直观地了解所有变量之间的关系
将iris数据集的第1到4列的数据取出,两两组合,形成散点图。
1> pairs(iris[,1:4])
用plot也可以实现同样的效果
1
2
3
4
5
6> plot(iris[,1:4],
main="Relationships between
characteristics of iris flowers",
pch=19,
col="blue",
cex=0.9)
利用par()在同一个device输出多个散点图
Par命令博大精深,用于设置绘图参数,help(par)
1
2> par(mfrow=c(3,1))
> plot(x$V2,x$V3);plot(x$V3,x$V4);plot(x$V4,x$V1)
par(mfrow=c(3,1)) 把屏幕划分成3个水平区域
plot(x1,x2);plot(x2,x3);plot(x3,x1); 分别将三个散点图显示在这三块区域中。
如果想深入学习R语言图像绘制,建议对par()函数的文档深入学习,并且学习《R Graphs Cookbook》这本书,会有很大收获的。
颜色colors()
查看有哪些颜色 colors()
1
2
3
4
5
6
7
8
9
10
11
12
13
14> colors()
[1] "white" "aliceblue" "antiquewhite"
[4] "antiquewhite1" "antiquewhite2" "antiquewhite3"
[7] "antiquewhite4" "aquamarine" "aquamarine1"
[10] "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2"
[16] "azure3" "azure4" "beige"
[19] "bisque" "bisque1" "bisque2"
[22] "bisque3" "bisque4" "black"
[25] "blanchedalmond" "blue" "blue1"
[28] "blue2" "blue3" "blue4"
[31] "blueviolet" "brown" "brown1"
[34] "brown2" "brown3" "brown4"
...
绘图设备
1
2
3
4
5
6
7
8> dev.cur() # 当前图形窗
> dev.list() # 查看现在所有的图形窗
> dev.next(which=dev.cur()) #某个图形窗的后一个图形窗
> dev.prev(which=dev.cur()) #某个图形窗的前一个图形窗
> dev.off(which=dev.cur()) #关闭某个图形窗
> dev.set(which=dev.next()) #设置图形窗
> dev.new(...) #开启新的图形窗
> graphics.off() #关闭整个窗口
三维散点图
安装scatterplot3d包
1
2> library(scatterplot3d)
> scatterplot3d(x[2:4])
1
2
3
4> x
> f
> z
> contour(x,y,z,col="blue")
1
2> contour(x,y,z,col="blue")
> persp(x,y,z,theta=30,phi=30,expand=0.7,col="lightblue")
地图
安装maps包
显示美国地图:
1
2> library(maps)
> map("state",interior=F)
state 代表美国
世界地图的绘制:
1> map("world",fill=T,col=heat.colors(10))
社交数据可视化
通过R可以画出如下的facebook社交关系图: