R基础绘图
图形分布
有时候我们需要把不同的图形放到一张图里面,做一个组合图进行比较分析,那么在作图之前就需要把画布进行区域划分,R语言划分函数有两个:par()函数和layout()函数。这两个函数都可以将画布进行绘图区域划分;par()函数将图形均匀地划分成几个区域,layout()函数则可以调整划分的比例。
par()函数
par()函数的参数,把不同的图放到一起,预先设定图形分割成几块。
par(mfcol = c(2,3), #mfcol按列排列,mfrow按行排列,c(2,3)两行三列
mar = c(2,2,2,2), #margin c(botton, left, top, right) 设置边距
bg = 'gray') #backgroud,设置背景颜色
layout()函数
layout()函数可以调整划分的比例,有的子图包含更多的信息,所占空间更大,通过layout()函数就可以实现画布比例的调整。
<- layout(matrix(c(1,1,2,3), 2, 2, byrow = TRUE),
lay # 2, 2划分为两行两列,byrow = TRUE按行顺数,
# (1,1,2,3)第一行第一、二列为第一幅图,第二行第一列为第二幅图,第二行第二列为第三幅图
widths = c(3,2), heights = c(2,3)) #widths = c(3,2)设置第一列比第二列比例为3:2
layout.show(lay) #展示划分结果
泛型函数:plot()
R中最普通的作图函数就是plot()函数,它是一个泛型函数,可以接受很多不同类的对象作为它的作图对象参数;我们这里要解释的是其中的图形参数,而非作图对象参数。可以绘制散点图,折线图。
par(mfcol = c(1,2),
mar = c(2,2,2,2),
bg = 'gray')
plot(1:4,5:8) #散点图
plot(c(4,5),c(15,20),type='l') #折线图
我们先来看看plot()的参数有哪些,先通过一张图有一个大概了解。我们用R自带的数据包mtcars来绘图展示一下:
#R自带的数据集,32辆汽车的样本信息,包括它们的重量,燃油效率,速度等 mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
plot(mtcars[,1:2],
type = 'o', #线的类型
pch = 16, #点的图形
col = 'purple', #颜色
lty = 3, #线的属性
asp = 1, #图形纵横比y/x
main = 'mtcars plot', #主标题
sub = 'test plot', #副标题
cex = 2, #点的大小
xlim = c(10,35), #x范围
ylim = c(4,8), #y范围
frame = F) #边框的有无
对plot()的参数type、pch进一步解释:
type 图形样式类型,有九种可能的取值,分别代表不同的样式。:’p’⇒画点;’l’⇒画线5;’b’⇒同时画点和线,但点线不相交;’c’⇒ 将type=’b’中的点去掉,只剩下相应的线条部分;’o’⇒同时画点和线,且相互重叠,这是它与type = ’b’的区别;’h’⇒画铅垂线;’s’⇒画阶梯线,从一点到下一点时,先画水平线,再画垂直线;’S’⇒也是画阶梯线,但从一点到下一点是先画垂直线,再画水平线;’n’⇒作一幅空图,没有任何内容,但坐标轴、标题等其它元素都照样显示 (除非用别的设置特意隐藏了)。
par(mfrow = c(3, 3), mar = c(2, 2.5, 3, 2))
for (i in c("p", "l", "b", "c", "o", "h", "s", "S","n")) {
plot(c(1:4, 5:8), type = i, main = paste("Plot type: \"",
"\"", sep = ""), xlab = "")} i,
点、线、点线(不相接)、擦掉点的线、点线(相接)、垂线、阶梯(水平起步)、阶梯(垂直起步)、无
pch标记点的类型一共有25种,绘图中可以用不同的点来区分标记的数据类型不同:
plot(0:25, pch = 0:25)
作图常用元素
任何一幅统计图形都是由最基础的图形元素构成的,这些元素我们并不陌生,无非就是颜色、点、线(直线、曲线、线段甚至箭头)、矩形、任意多边形、文本以及图例。R提供了相应的一系列函数,用以向已有的图形中添加图形元素。事实上,R的所有作图函数分为两类,一类是高层函数(high-level),用以生成新的图形,另一类就是低层函数(low-level),这 一类指的正是绘制图形元素的这些基础函数。
波动线lines()
在添加元素之前,先画一个框架,指定坐标轴范围 ,再向图中添加元素
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
向图中添加10个正态随机数绝对值的波动线
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
lines(1:10, abs(rnorm(10)))
直线abline()
向图中添加不同的直线,y=b*x+a,x=2,y=2
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
abline(a = 2, b = 1, col = "gray") #y=b*x+a
abline(v = 2, lty = 2) #x=2,vertical
abline(h = 2, lty = 2) #y=2,horizontal
点point()
添加固定位置的点,可以根据泛型函数中点的特性参数来调节点的类型,R语言中这类参数是通用的。
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
points(7.5,6)
points(8,8,pch =15)
文本text()
在图形(7,7)的位置添加文本“abline(a = 0, b=1)”,text()可以用来对图中特殊位置或者有指定含义的线条、点、数字进行解释说明
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
abline(a = 2, b = 1, col = "gray") #y=b*x+a
text(7, 7, "abline(a = 2, b = 1)") #文本位置在8,3
箭头arrows()
在图形中添加箭头,指定箭头的起点为(8,3.5),终点为(6,5.7),箭头半角为45度,即箭头全角为90度。
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
arrows(8, 3.5, 6, 5.7, angle =45 )
平行线段segments()
先在图形中添加一段线:起点为(1,2),终点为(3,4); 再在图形中添加平行线段四段:起点分别为(3,6)(3,7)(3,8)(3,9),对应终点分别为(5,6)(6,6)(7,6)(8,6),线段颜色用渐变灰色,再标注线段“segments”
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
segments(1,2,3,4)
segments(rep(3, 4), 6:9, rep(5, 4), 6:9, col = gray(seq(0.2,0.8, length = 4)))
text(4, 9.8, "segments")
网格grid()
在图形中添加网格线,nx,ny分别表示垂直于x轴和y轴的网格,NULL表示保留,NA表示删掉。
plot(1:10, type = "n", xlim = c(0, 10), ylim = c(0,10))
grid(nx = NULL,ny = NA)
基本图形
散点图
两个变量之间的关系,这种关系可能是线性或非线性的,画一个人造数据的散点图:我们设计了2万个样本,其中有1万个样本点来自于两个独立的标准正态分布,另1万个样本点的坐标落在半径为0.5的圆上,最后将这2万个样本拼起来并打乱顺序。
# install.packages('MSG') 需要先下载R的数据包MSG
library(MSG)
## Warning: 程辑包'MSG'是用R版本4.1.2 来建造的
data(BinormCircle)
plot(BinormCircle)
直方图hist()
直方图,展示连续数据分布最常用的工具,它本质上是对密度函数的一种估计。 geyser是R自带数据,表示喷泉的间隔、持续时间。 (1)默认参数值作频数图;(2)概率密度直方图; (3)调整hist()参数试着减小区间段数,直方图看起来更平滑; (4)用density填充线条的密度,增大区间段数,这样直方图更突兀,作图如下:
library(MASS)
data(geyser)
par(mfrow = c(2,2), mar = c(3,3,2,0.5), mgp = c(2, 0.5, 0))
hist(geyser$waiting, main = "(1) freq = TRUE", xlab = "waiting")
hist(geyser$waiting, freq = FALSE, main = "(2) freq = FALSE", xlab = "waiting")
hist(geyser$waiting, breaks = 5, density = 20, xlab = "waiting", main = "(3) breaks = 5") #
hist(geyser$waiting, breaks = 40, col = "red", xlab = "waiting", main = "(4) breaks = 40")
箱线图boxplot()
箱线图,从四分位数的角度 出发描述数据的分布,它通过最大值(Q4)、上四分位数(Q3)、中位数 (Q2)、下四分位数(Q1)和最小值(Q0)五处位置来获取一维数据的分布概况。以datasets包 中的杀虫剂数据InsectSprays为例;该数据有两列,第一列为昆虫数目,第二列为杀虫剂种类(ABCDEF),这里是随机抽取的10列数据:
sample(nrow(InsectSprays), 10), ] InsectSprays[
## count spray
## 17 16 B
## 40 6 D
## 65 15 F
## 31 2 C
## 1 10 A
## 69 26 F
## 64 22 F
## 11 14 A
## 66 16 F
## 6 12 A
InsectSprays
## count spray
## 1 10 A
## 2 7 A
## 3 20 A
## 4 14 A
## 5 14 A
## 6 12 A
## 7 10 A
## 8 23 A
## 9 17 A
## 10 20 A
## 11 14 A
## 12 13 A
## 13 11 B
## 14 17 B
## 15 21 B
## 16 11 B
## 17 16 B
## 18 14 B
## 19 17 B
## 20 17 B
## 21 19 B
## 22 21 B
## 23 7 B
## 24 13 B
## 25 0 C
## 26 1 C
## 27 7 C
## 28 2 C
## 29 3 C
## 30 1 C
## 31 2 C
## 32 1 C
## 33 3 C
## 34 0 C
## 35 1 C
## 36 4 C
## 37 3 D
## 38 5 D
## 39 12 D
## 40 6 D
## 41 4 D
## 42 3 D
## 43 5 D
## 44 5 D
## 45 5 D
## 46 5 D
## 47 2 D
## 48 4 D
## 49 3 E
## 50 5 E
## 51 3 E
## 52 5 E
## 53 3 E
## 54 6 E
## 55 1 E
## 56 1 E
## 57 3 E
## 58 2 E
## 59 6 E
## 60 4 E
## 61 11 F
## 62 9 F
## 63 15 F
## 64 22 F
## 65 15 F
## 66 16 F
## 67 13 F
## 68 10 F
## 69 26 F
## 70 26 F
## 71 24 F
## 72 13 F
<- InsectSprays[,1] x
将所有的昆虫数目作为样本,进行绘图如下:
boxplot(x)
par(mar = c(2, 2.5, 0.2, 0.1))
boxplot(count ~ spray, data = InsectSprays, col = "lightgray",
horizontal = T, pch = 4) #horizontal = T横向
条形图barplot()
条形图,能以矩形条的长度展示 原始数值,对数据没有任何概括或推断。VADeaths是R自带的一个数据包,里面包含了1940年弗吉尼亚州分年龄组、分地区和分性别死亡率数据。
data(VADeaths)
#install.packages('RColorBrewer')
library(RColorBrewer) #调用调色板
par(mfrow = c(2, 1), mar = c(3, 2.5, 0.5, 0.1))
= t(VADeaths)[, 5:1] #转置、重新排列年龄段
death death
## 70-74 65-69 60-64 55-59 50-54
## Rural Male 66.0 41.0 26.9 18.1 11.7
## Rural Female 54.3 30.9 20.3 11.7 8.7
## Urban Male 71.1 54.6 37.0 24.3 15.4
## Urban Female 50.0 35.1 19.3 13.6 8.4
barplot(death, col = brewer.pal(4, "Set1"))
barplot(death, col = brewer.pal(4, "Set1"),
beside = TRUE, #beside相邻,不堆叠
legend = TRUE,#length图例
horiz = T) #length图例
### 饼图pie() ### 饼图的原理很简单,每一个扇形的角度与相应数据的数值大小成比例。下面我们随意取数来绘制一个饼图:
par(mfcol = c(1,2))
<- c(95,26,36,78,25,65)
x <- c("a", "b", "c","d", "e", "f")
labels pie(x,labels,main = 'Simple Pie Chart')
<- round(x/sum(x)*100) #转化百分比
pct <- paste(labels,' ',pct,'%',sep = '') #paste连接函数,seperate
labels2 labels2
## [1] "a 29%" "b 8%" "c 11%" "d 24%" "e 8%" "f 20%"
pie(pct,labels2,col = rainbow(length(labels2)),main = 'Pie Chart with Percentages')
以上绘制的是二维的饼图,R也可以绘制三维的饼图,但是我认为三维饼图与二维饼图相比较,除了视觉效果不同,不能包含更多的数据信息,所以这里没有深入讨论三维饼图。如果有人感兴趣,可以自己研究一下。三维饼图会用到plotrix这个包,需要下载,函数是pie3D(x,labels,explode = 0.1,main = ‘3D Pie Chart’)。
函数图curve()
函数图在金融里面的应用还是非常多的,这里只画了sin(x),cos(x)这两个基础函数,以及一些基本参数的设置:
par(mfcol = c(1,3),mar = c(4,4,0.5,0.5))
curve(sin(x), from = -2*pi, to = 2*pi, n = 100)
curve(sin(x), from = 0, to = 10, n = 100, add = F,
type = 'l', xlab = 'x', ylab = 'sin(x)',xlim = c(-2,12), ylim = c(-1.5,1.5))
curve(cos(x), from = -2*pi, to = 2*pi, n = 100)
地图map()地图
先来看看map()函数的世界地图和美国地图,地图数据包含在maps这个包里:
# install.packages('maps')
library('maps')
map('world')
map('state',boundary = T,col = 'red',fill = T)
将数据进行可视化,在地图中呈现出来的效果,先调整地图的大小范围:
#install.packages('geosphere') #绘图的包,用到里面的弧线连线函数
library('geosphere')
## Warning: 程辑包'geosphere'是用R版本4.1.2 来建造的
#设置坐标范围使焦点集中在美国周边,并且设置一些有关颜色
<- c(-171.738, -56.602)#经度
xlim <- c(12.039,71.856)#纬度
ylim map('world', col = '#f2f2f2', fill = T, bg = 'white', xlim = xlim, ylim = ylim)
#给定点的位置,在地图中标注出来,比如芝加哥坐标北纬41°39′、西经87°34′,加拿大多伦多北纬43度39分,西经79度23分
points(-87.34,41.39,pch = 12)
points(-79.23,43.39,pch = 15)
因为图片中表示的范围太大,难以找到对应的点,调小显示图的范围,再把这两点用弧线连接起来:
#调整经纬度范围
<- c(-100,-50)#经度
xlim <- c(20,50)#纬度
ylim map('world', col = '#f2f2f2', fill = T, bg = 'white', xlim = xlim, ylim = ylim)
#画一条弧线连线,表示社交关系
<- -87.34 #longitude 经度
lon_ca <- 41.39 #latitudu 纬度
lat_ca <- -79.23
lon_me <- 43.39
lat_me lines(c(-87.34,-79.23),c(41.39,43.39),col='red')
<- gcIntermediate(c(lon_ca, lat_ca), c(lon_me, lat_me), addStartEnd=TRUE) #addStartEnd=TRUE 连接起始点
interlines(inter, col='green')
这种在地图上用弧线连接两点,经常用来表示飞机的航线,我们用网上的一些航线数据来作图:
#装载数据
<- read.csv("http://datasets.flowingdata.com/tuts/maparcs/airports.csv", header=TRUE)
airports <- read.csv("http://datasets.flowingdata.com/tuts/maparcs/flights.csv", header=TRUE, as.is=TRUE)
flights map("world", col="#f2f2f2", fill=TRUE, bg="white", lwd=0.05, xlim=xlim, ylim=ylim)
<- flights[flights$airline == "AA",]
fsub for (j in 1:length(fsub$airline)) {
<- airports[airports$iata == fsub[j,]$airport1,]
air1 <- airports[airports$iata == fsub[j,]$airport2,]
air2 <- gcIntermediate(c(air1[1,]$long, air1[1,]$lat), c(air2[1,]$long, air2[1,]$lat), n=100, addStartEnd=TRUE)
inter lines(inter, col="black", lwd=0.8)
}
#R语言地图绘制,底图+数据,会用到ggplot2,暂时跳过
#install.packages('rgdal')
library('rgdal')
## Warning: 程辑包'rgdal'是用R版本4.1.2 来建造的
## 载入需要的程辑包:sp
## Warning: 程辑包'sp'是用R版本4.1.2 来建造的
## Please note that rgdal will be retired by the end of 2023,
## plan transition to sf/stars/terra functions using GDAL and PROJ
## at your earliest convenience.
##
## rgdal: version: 1.5-27, (SVN revision 1148)
## Geospatial Data Abstraction Library extensions to R successfully loaded
## Loaded GDAL runtime: GDAL 3.2.1, released 2020/12/29
## Path to GDAL shared files: C:/Users/wenkuangyu/Documents/R/win-library/4.1/rgdal/gdal
## GDAL binary built with GEOS: TRUE
## Loaded PROJ runtime: Rel. 7.2.1, January 1st, 2021, [PJ_VERSION: 721]
## Path to PROJ shared files: C:/Users/wenkuangyu/Documents/R/win-library/4.1/rgdal/proj
## PROJ CDN enabled: FALSE
## Linking to sp version:1.4-6
## To mute warnings of possible GDAL/OSR exportToProj4() degradation,
## use options("rgdal_show_exportToProj4_warnings"="none") before loading sp or rgdal.
## Overwritten PROJ_LIB was C:/Users/wenkuangyu/Documents/R/win-library/4.1/rgdal/proj
#install.packages('mapdata')
library('mapdata')
## Warning: 程辑包'mapdata'是用R版本4.1.2 来建造的
#install.packages('maptools')
library('maptools')
## Warning: 程辑包'maptools'是用R版本4.1.2 来建造的
## Checking rgeos availability: FALSE
## Please note that 'maptools' will be retired by the end of 2023,
## plan transition at your earliest convenience;
## some functionality will be moved to 'sp'.
## Note: when rgeos is not available, polygon geometry computations in maptools depend on gpclib,
## which has a restricted licence. It is disabled by default;
## to enable gpclib, type gpclibPermit()
#install.packages('ggplot2')
library('ggplot2')
#设置路径工作路径
<-readOGR('./data/bou2_4p.shp',stringsAsFactors=F) x
## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\wenkuangyu\Desktop\about_rbase_plot\data\bou2_4p.shp", layer: "bou2_4p"
## with 925 features
## It has 7 fields
## Integer64 fields read as strings: BOU2_4M_ BOU2_4M_ID
# head(x) # x
plot(x)
#设置颜色
= function(x, provname, provcol){
getColor = function(x, y) ifelse(x %in% y, which(y == x), 0);
f = sapply(x@data$NAME, f, provname);
colIndex = c(provcol)[colIndex + 1];
col return(col);
}=c ("北京市", "天津市", "河北省", "山西省", "内蒙古自治区","辽宁省", "吉林省", "黑龙江省", "上海市", "江苏省","浙江省", "安徽省", "福建省", "江西省", "山东省","河南省", "湖北省", "湖南省", "广东省","广西壮族自治区", "海南省", "重庆市", "四川省", "贵州省","云南省", "西藏自治区", "陕西省", "甘肃省", "青海省","宁夏回族自治区", "新疆维吾尔自治区", "台湾省","香港特别行政区")
provname =c(111,28,65,35,18,39,14,43,101,129,428,200,101,162,145,278,4586,277,311,78,46,165,142,12,70,1,63,26,6,12,14,8,10)
pop= rgb(blue = 1 - pop/max(pop)/2, green = 1-pop/max(pop)/2, red = 0.5)
provcol #最关键的上色
plot(x, col= getColor(x, provname, provcol), xlab = "", ylab = "")
三维图hist3D()
三维地形图persp() ,contour()等高线,我们用不上;image3D()在一个3维绘图对象中添加一个平面图
# install.packages('plot3D')
library(plot3D)
par(bg = "#ffffb3") #设置背景颜色为淡黄色
# 同时绘制3个平面,1个平面平行于y-z平面,1个平行于x-z平面,1个平行于x-y平面;1.绘制x=0.5平面,平行于y-z平面:
image3D(y = seq(0, 1, 0.1), z = seq(0, 1, 0.1), x = 0.5,
col = "cyan", xlim = c(0,1), alpha = 0.5,# xlim设定坐标轴范围,col指定平面颜色。alpha透明度
colkey = list(plot = FALSE), # 使用colkey = list(plot=FALSE)留出图例区域。
bty = "u", col.axis = "blue", col.panel = NA) # 手动设置背景格式,col.panel=NA表示透明panels
# 2.绘制 y = 0.5平面,平行于x-z平面
image3D(x = seq(0, 1, 0.1), z = seq(0, 1, 0.1), y = 0.4,
add = TRUE, col = "purple", alpha = 0.8) #add = T,在上一幅图的基础上添加,不用单独画
# 3.绘制 z= 0.5平面,其平行于x-y平面
image3D(x = seq(0, 1, 0.1), y = seq(0, 1, 0.1), z = 0.3,
add = TRUE, col = "magenta", alpha = 0.5) # alpha指定透明度
# 增加图例
colkey(col = c("magenta", "purple", "cyan"), clim = c(0.5, 3.5), #刻度范围从0.5到3.5
at = 1:3, labels = c("z", "y", "x"), add = TRUE,clab='图例',
dist = -0.1, length = 0.5, col.axis = "blue")
# 直方图,条形图、散点图、箱线图、地图三维的比二位平面的可以包含更多的信息;但是对于三维的饼图和二维饼图包含的信息一样,只是视觉效果更好一点
# 一个城市与农村不同年龄,不同性别人口数量数据集, VADeaths
## Rural Male Rural Female Urban Male Urban Female
## 50-54 11.7 8.7 15.4 8.4
## 55-59 18.1 11.7 24.3 13.6
## 60-64 26.9 20.3 37.0 19.3
## 65-69 41.0 30.9 54.6 35.1
## 70-74 66.0 54.3 71.1 50.0
hist3D(z = VADeaths)
hist3D(z = VADeaths,
scale = FALSE, expand = 0.01, bty = "g", theta = 290, phi = 20, # expand = 0.01,z轴方向压缩
col = "green", border = "magenta", shade = 0.2, ltheta = -290,
space = 0.3, ticktype = "detailed", d = 2) # 设定柱子间隙为0.3, d=2>1降低透视强度
hist3D (x = 1:5, y = 1:4, z = VADeaths,
bty = "g", phi = 20, theta = -60,
xlab = NA, ylab = NA, zlab = "", main = "VADeaths", # main增加主标题
col = "green", border = "magenta", shade = 0.8,
ticktype = "detailed", space = 0.15, d = 2)
# 添加3维文字,给x轴增加刻度标签
text3D(x = 1:5, y = rep(-0.3, 5), z = rep(3, 5), # y相同,在x轴上增加刻度标签
labels = rownames(VADeaths),
add = TRUE, adj = 0)
# 添加3维文字,给y轴增加刻度标签
text3D(x = rep(0.5, 4), y = 1:4, z = rep(0, 4), # x相同
labels = colnames(VADeaths),
add = TRUE, adj = 1)