R语言基础| 中级绘图
写在前面
前面第六章的图形主要是展示单分类变量或连续型变量的分布情况。本章主要研究二元变量或多元变量关系的可视化。更多教程可参考:
R语言基础学习手册
图片集锦:
11.1 散点图
1)添加最佳拟合曲线的散点图: 绘制汽车重量与燃油效率之间的关系图(mtcars包):
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
library(ggplot2)
ggplot(mtcars,aes(x=wt,y=mpg))+geom_point()+geom_smooth(method = "lm",se=FALSE,color="red")+geom_smooth(method = "loess",se=FALSE,color="blue",linetype="dashed")+labs(title = "Basic Scatter Plot of MPG vs. Weight",x="Car weight",y="Miles per gallon")+theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
注:
1.将 se=FALSE 设置为geom_smooth()函数的参数,可以禁用置信区间的显示,使拟合曲线仅显示其基本形状,而不显示任何不确定性范围(阴影)。
2.LOESS 是一种非参数的回归方法,它通过在数据周围的局部区域内进行加权拟合来估计变量之间的关系。它在拟合过程中考虑了数据的局部特征,因此可以更好地适应非线性关系。
2)添加单独的最佳拟合曲线的散点图: 分别绘制四缸、六缸和八缸汽车的汽车重量与燃油效率之间的关系图(mtcars包):
library(ggplot2)
ggplot(mtcars,aes(x=wt,y=mpg,color=factor(cyl),shape=factor(cyl)))+geom_point()+geom_smooth(method = "lm",se=FALSE)+geom_smooth(method = "loess",se=FALSE,linetype="dashed")+labs(title = "Basic Scatter Plot of MPG vs. Weight",subtitle = "By numberof cylinders",x="Car weight",y="Miles per gallon")+theme_bw()
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
散点图可以一次对两个定量变量间的关系进行可视化,但当变量超过2个时,可以用散点图矩阵展示。
11.1.1 散点图矩阵(Scatterplot Matrix)
散点图矩阵在R中被用来同时展示多个变量之间的关系。它是一种多变量可视化方法,通过在一个图形中显示多个散点图,可以帮助我们观察和理解变量之间的相互关系,特别是在探索性数据分析中非常有用。
主要用于:
1.变量关系的可视化
2.变量之间的相关性分析
3.特征选择和变量筛选
之前在8.2.4中展示了car包中的ScatterplotMatrix函数创建方法,这里学习GGally包中的ggpairs()函数创建ggplot2版本的散点图矩阵。
-
11.1.1.1 基础ggpairs()函数(GGally包中的)
观察mtcars数据集中,汽车里程(mpg)、汽车重量(wt)、排量(disp)和后轴比(drat)间的二元关系:
library(GGally)
## Warning: 程辑包'GGally'是用R版本4.3.2 来建造的
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(mtcars[c("mpg","disp","drat","wt")])
-
11.1.1.2 添加拟合线、直方图和相关系数的散点图矩阵
library(GGally)
library(ggplot2)
diagplots <- function(data,mapping){ggplot(data = data,mapping = mapping)+geom_histogram(fill="lightblue",color="black")
}
lowerplots <- function(data,mapping){ggplot(data = data,mapping = mapping)+geom_point(color="darkgrey")+geom_smooth(method = "lm",color="steelblue",se=FALSE)+geom_smooth(method = "loess",color="red",se=FALSE,linetype="dashed")
}
upperplots <- function(data,mapping){ggally_cor(data = data,mapping = mapping,display_grid = FALSE,size=3,color="black")
}mytheme <- theme(strip.background = element_blank(),panel.grid = element_blank(),panel.background = element_blank(),panel.border = element_rect(color = "grey20",fill = NA))ggpairs(mtcars,columns = c("mpg","disp","drat","wt"),columnLabels = c("MPG","Displacement","R Axle Ratio","Weight"),lower = list(continuous=lowerplots),diag = list(continuous=diagplots),upper = list(continuous=upperplots))+mytheme
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
知识点补充:
-
1.theme()函数
theme() 函数是 ggplot2 包中用于设置图表外观的函数。它可以用于修改和自定义图表的各个元素,如标题、轴标签、网格线、背景颜色等。以下是 theme() 函数的一些常用参数和用法:
theme(...)
1)通过 theme() 函数可以设置的图表元素包括:
title:图表标题的样式。
plot.title:绘图区域的标题样式。
axis.title:坐标轴标题的样式。
axis.text:坐标轴刻度标签的样式。
axis.line:坐标轴线的样式。
axis.ticks:坐标轴刻度线的样式。
legend.title:图例标题的样式。
legend.text:图例标签的样式。
panel.background:面板背景的样式。
panel.grid:面板网格线的样式。
panel.border:面板边框的样式。
strip.background:面板标题背景的样式。
2)对于每个图表元素,可以使用不同的函数来设置样式,常用的函数包括:
element_text():用于设置文本样式,如字体、大小、颜色等。
element_line():用于设置线条样式,如颜色、线型、粗细等。
element_rect():用于设置矩形样式,如颜色、填充、边框等。
element_blank():用于设置为空,即不显示该元素。
-
2.在 ggpairs() 函数中,lower、diag 和 upper参数
用于指定自定义绘图函数,以控制矩阵散点图矩阵中不同位置的图层绘制方式:
lower: 用于指定下三角部分的图层绘制方式;
diag:用于指定对角线部分的图层绘制方式;
upper:用于指定上三角部分的图层绘制方式。
list(continuous =)指定了一个连续型变量的图层设置.
-
3. ggally_cor()函数 ggally_cor()函数用于创建变量之间相关性矩阵的可视化。
用法:
ggally_cor(data, mapping = NULL, method = "pearson", color = "RdYlBu"
display_grid是一个参数,用于控制是否显示相关性矩阵的网格线。
11.1.2 普通高密度散点图(当观测值较多时容易造成重叠)
set.seed(1234)
n <- 10000
c1 <- matrix(rnorm(n,mean=0,sd=0.5),ncol = 2)#用于生成一个具有 n 行和 2 列的矩阵 c1,其中矩阵的每个元素都是从均值为 0、标准差为 0.5 的正态分布中随机抽取的数字
c2 <- matrix(rnorm(n,mean = 3,sd=2),ncol = 2)
mydata <- rbind(c1,c2)
mydata <- data.frame(mydata)
names(mydata) <- c("x","y")#将mydata数据框原来的列名修改为x和y
library(ggplot2)
ggplot(mydata,aes(x=x,y=y))+geom_point()
注:
rnorm(n, mean = 0, sd = 0.5) 是一个随机函数 rnorm(),用于生成符合正态分布的随机数。其中,n 是要生成的随机数的个数,mean 是正态分布的均值,sd 是正态分布的标准差。在这里,我们生成了 n 个均值为 0、标准差为 0.5 的正态分布随机数。
从该图看出,当观测值较多时,散点重叠后非常难看,可以用下面方法进行改进。
-
11.1.2.1 利用核密度估计生成用颜色密度来表示点分布的散点图SmoothScatter()
with(mydata,smoothScatter(x,y,main="Scatter Plot colored by smoothed dendities"))
注:SmoothScatter() 函数是一个用于生成平滑散点图的函数,较高密度区域将以较亮的颜色表示,较低密度区域将以较暗的颜色表示,这有助于观察数据的分布模式和聚集情况。
-
11.1.2.2 方法2
利用hexbin包中的geom_hex()函数
library(ggplot2)
library(hexbin)
## Warning: 程辑包'hexbin'是用R版本4.3.2 来建造的
ggplot(mydata,aes(x=x,y=y))+geom_hex(bins=50)+#bins 参数用于指定六边形的数量或密度级别scale_fill_continuous(trans='reverse')#使颜色较深的表示较大的密度区域
11.1.3 三维散点图
散点图和散点图矩阵都是二元变量关系,如需三元(三维)散点图需要使用scatterplot3d包中的scaterplot3d()函数:
scatterplot3d(x,y,z)
x:水平轴,y:竖直轴,z透视轴。
举例:观察mpg,wt,disp三者的关系:
library(scatterplot3d)
with(mtcars,scatterplot3d(wt,disp,mpg,main = "Basic 3D scatter plot"))
scatterplot3d() 函数的设置包括:
color:用于指定数据点的颜色。
pch:用于指定数据点的形状。可以是一个整数或字符向量,对应于不同的形状选项。例如,pch = 16 表示实心圆点,pch = 3 表示倒三角形。
main:用于设置图表的标题。
xlab、ylab、zlab:用于设置 x、y、z 轴的标签。
xlim、ylim、zlim:用于设置 x、y、z 轴的显示范围。
theta、phi:用于设置视角的旋转。theta 控制水平旋转角度,phi 控制垂直旋转角度。
box:用于控制是否显示坐标轴框线。设定为 FALSE 可以隐藏框线。
type:“p”:绘制散点图(默认选项),即绘制数据点。“l”:绘制连线,将数据点按照它们在数据向量中的顺序连接起来,形成线条。“n”:不绘制任何内容,只创建一个空的 3D 坐标系。“h”绘制垂直于底部平面的线段。
-
11.1.3.1 设置一些scatterplot3d()的参数
library(scatterplot3d)
with(mtcars,scatterplot3d(wt,disp,mpg,pch = 16,type = "h",main = "Basic 3D scatter plot"))
-
11.1.3.2 添加回归平面
library(scatterplot3d)
s3d <- with(mtcars,scatterplot3d(wt,disp,mpg,pch = 16,type = "h",main = "Basic 3D scatter plot"))
fit <- lm(mpg~wt+disp,mtcars)
s3d$plane3d(fit)#xxx$plane3d() 函数用于在三维散点图上添加一个平面,fit为一个回归分析,因此是建立回归平面
回归面表示预测值,点为实际值,平面值到点的距离为残差值。若点在平面上,则表示预测值被低估;反之则高估。
11.1.4 旋转三维散点图
-
11.1.4.1 rgl包中的plot3d()函数
语法:
library(rgl)
plot3d(x,y,z)
参数包括:
1.type: 可选参数,指定绘图类型。常见的类型有:
“s”: 绘制散点图(默认值)。
“l”: 绘制线条。
“h”: 绘制线段,垂直于底部平面。
“n”: 不绘制任何内容,只创建一个空的 3D 坐标系。
2.col
3.size
举例:
library(rgl)
with(mtcars,plot3d(wt,disp,mpg,col="red",size=5))#注意这里用col而非color指定颜色
由于这个是交互式的,这里不展示,在rstudio中进行展示。
-
11.1.4.2 car包中的scatter3d()函数
与plot3d()相比,scatter3d()包含各种回归曲面,eg线性,二次,平滑和加性等类型的回归曲面。
语法:
library(car)
scatter3d(x,y,z)
举例:
library(car)
library(carData)
library(mgcv)
library(MASS)
library(nlme)
with(mtcars,scatter3d(wt,disp,mpg,color="red",size=5))
同样,这里不做展示,需要展示的去Rstudio中演示。
11.1.5 气泡图
先建立一个二维散点图,用点的大小代表第3个变量的值,即气泡图。
语法:
ggplot(data,aes(x=,y=,size=,fill=factor()))+geom_point(alpha=,color=,shape=)+labs()
size= 即是圆圈大小代表的变量,
fill=factor()按这个进行分组填充,
shape可以设置为数字值,0-25之间,也可以设置为字符型:“circle”(实心圆形),“square”(实心正方形),“triangle”(实心三角形)等。
举例:
ggplot(mtcars,aes(x=wt,y=mpg,size=disp,fill=factor(cyl)))+geom_point(alpha=0.6,shape="circle",aes(color=factor(cyl)))+labs(fill="Cylinders",color="Cylinders")+theme_minimal()
ggplot(mtcars,aes(x=wt,y=mpg,size=disp,color=factor(cyl)))+geom_point(alpha=0.6,shape="circle")+labs(fill="Cylinders",color="Cylinders")+theme_minimal()
两种效果是一样的!
一般来说,统计人员会倾向避免使用气泡图,因为相对于长度,体积或者面积更困难。
11.2 折线图
11.2.1 语法
将散点图上的点连起来即折线图。即在原有基础上加geom_line(),可设置的参数有:
size:线条粗细;
color:线条颜色;
linetype:线型(1实线,2虚线),另外,“solid”:实线(默认值)。“dashed”:虚线。“dotted”:点线。“dotdash”:点划线。“longdash”:长虚线。“twodash”:双划线。
11.2.2 散点图和折线图
用Orange数据集为例,包含5棵树的树龄和年轮数据。现要考察第一颗橘树的生长情况。
library(ggplot2)
tree1 <- subset(Orange,Tree==1)
tree1
## Grouped Data: circumference ~ age | Tree
## Tree age circumference
## 1 1 118 30
## 2 1 484 58
## 3 1 664 87
## 4 1 1004 115
## 5 1 1231 120
## 6 1 1372 142
## 7 1 1582 145
ggplot(tree1,aes(x=age,y=circumference))+geom_point(size=1)+geom_line()+theme_bw()
用Orange数据集为例,包含5棵树的树龄和年轮数据。现要考察5颗橘树的生长情况。
library(ggplot2)
Orange
## Grouped Data: circumference ~ age | Tree
## Tree age circumference
## 1 1 118 30
## 2 1 484 58
## 3 1 664 87
## 4 1 1004 115
## 5 1 1231 120
## 6 1 1372 142
## 7 1 1582 145
## 8 2 118 33
## 9 2 484 69
## 10 2 664 111
## 11 2 1004 156
## 12 2 1231 172
## 13 2 1372 203
## 14 2 1582 203
## 15 3 118 30
## 16 3 484 51
## 17 3 664 75
## 18 3 1004 108
## 19 3 1231 115
## 20 3 1372 139
## 21 3 1582 140
## 22 4 118 32
## 23 4 484 62
## 24 4 664 112
## 25 4 1004 167
## 26 4 1231 179
## 27 4 1372 209
## 28 4 1582 214
## 29 5 118 30
## 30 5 484 49
## 31 5 664 81
## 32 5 1004 125
## 33 5 1231 142
## 34 5 1372 174
## 35 5 1582 177
ggplot(Orange,aes(x=age,y=circumference,linetype=Tree,color=Tree))+scale_color_brewer(palette = "Set1")+#用于选择调色板geom_point(size=1)+geom_line()+theme_bw()
11.3 相关图
11.3.1 corrgram()函数
来自corrgram()包(需要安装)
语法:
library(corrgram)
corrgram(x,order = ,panel = ,text.panel = ,diag.panel = )
x:是一行一个观测值的数据框
order=TRUE:相关矩阵将使用主成分分析法对变量重排序,这将使得二元变量的关系模式更为明显
panel:可以用lower.panel= 和upper.panel=分别设置主对角线下方和上方的元素类型
text.panel和diag.panel:控制主对角线元素类型。
可用的panel值见下表,其中非对角线的部分主要应用于lower.panel和upper.panel;主对角线部分主要应用于text.panel和diag.panel:
位置 | 面版选项 | 描述 |
---|---|---|
非对角线 | panel.pie | 用饼图的填充比例来表示相关性大小 |
panel.shade | 用阴影的深度来表示相关性大小 | |
panel.ellipse | 画一个置信椭圆和平滑曲线 | |
panel.pts | 画一个散点图 | |
panel.conf | 画出相关性并包含置信区间 | |
panel.cor | 画出相关性,不包含置信区间 | |
主对角线 | panel.txt | 输出变量名 |
panel.minmax | 输出变量的最大最小值和变量名 | |
panel.density | 输出核密度曲线和变量名 |
11.3.2 举例
数据集mtcars中变量相关性,共11个变量:
cor <- cor(mtcars,method = "pearson")
cor
## mpg cyl disp hp drat wt
## mpg 1.0000000 -0.8521620 -0.8475514 -0.7761684 0.68117191 -0.8676594
## cyl -0.8521620 1.0000000 0.9020329 0.8324475 -0.69993811 0.7824958
## disp -0.8475514 0.9020329 1.0000000 0.7909486 -0.71021393 0.8879799
## hp -0.7761684 0.8324475 0.7909486 1.0000000 -0.44875912 0.6587479
## drat 0.6811719 -0.6999381 -0.7102139 -0.4487591 1.00000000 -0.7124406
## wt -0.8676594 0.7824958 0.8879799 0.6587479 -0.71244065 1.0000000
## qsec 0.4186840 -0.5912421 -0.4336979 -0.7082234 0.09120476 -0.1747159
## vs 0.6640389 -0.8108118 -0.7104159 -0.7230967 0.44027846 -0.5549157
## am 0.5998324 -0.5226070 -0.5912270 -0.2432043 0.71271113 -0.6924953
## gear 0.4802848 -0.4926866 -0.5555692 -0.1257043 0.69961013 -0.5832870
## carb -0.5509251 0.5269883 0.3949769 0.7498125 -0.09078980 0.4276059
## qsec vs am gear carb
## mpg 0.41868403 0.6640389 0.59983243 0.4802848 -0.55092507
## cyl -0.59124207 -0.8108118 -0.52260705 -0.4926866 0.52698829
## disp -0.43369788 -0.7104159 -0.59122704 -0.5555692 0.39497686
## hp -0.70822339 -0.7230967 -0.24320426 -0.1257043 0.74981247
## drat 0.09120476 0.4402785 0.71271113 0.6996101 -0.09078980
## wt -0.17471588 -0.5549157 -0.69249526 -0.5832870 0.42760594
## qsec 1.00000000 0.7445354 -0.22986086 -0.2126822 -0.65624923
## vs 0.74453544 1.0000000 0.16834512 0.2060233 -0.56960714
## am -0.22986086 0.1683451 1.00000000 0.7940588 0.05753435
## gear -0.21268223 0.2060233 0.79405876 1.0000000 0.27407284
## carb -0.65624923 -0.5696071 0.05753435 0.2740728 1.00000000
library(corrgram)
## Warning: 程辑包'corrgram'是用R版本4.3.2 来建造的
corrgram(cor,order =TRUE ,lower.panel = panel.shade,upper.panel=panel.cor,text.panel =panel.txt ,diag.panel = panel.minmax)
## Warning in par(usr): argument 1 does not name a graphical parameter
## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter
11.3.3 可以用colorRampPallette()函数指定颜色
1.先用colorRampPallette()指定颜色
2.用col.regions选项引用前者的输出结果
library(corrgram)
cols <- colorRampPalette(c("darkgoldenrod4","burlywood1","darkkhaki","darkgreen"))
corrgram(cor,order =TRUE ,col.regions=cols,lower.panel=panel.shade,upper.panel=panel.cor,text.panel =panel.txt ,diag.panel = panel.minmax)
## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter## Warning in par(usr): argument 1 does not name a graphical parameter
11.4 马赛克图(vcd包中的mosaic()函数)
马赛克图是一种用于可视化两个或多个分类变量之间关系的图形。它的特点是图形中的矩形区域的面积与数据频数成比例。通过颜色、阴影或边框等方式,可以进一步表示不同类别的条件概率或关联程度。
语法:
#用法1:
mosaic(table)#table为数组形式的列联表
#用法2
mosaic(formula, data, shade = TRUE, legend = TRUE)#shade = TRUE, legend = TRUE为可选项
formula:一个公式,用于指定变量之间的关系。
data:数据框,包含相关变量。
shade = TRUE:该参数指定是否对马赛克图的矩形区域进行填充。当shade = TRUE时,每个矩形区域将使用不同的颜色进行填充,以区分不同的类别。
legend = TRUE:该参数指定是否显示图例。当legend = TRUE时,会在马赛克图的边缘添加一个图例,用于解释不同的类别或颜色所代表的含义。图例通常包括颜色示例和对应的标签。
举例:
以Titanic数据集为例,包含存活或死亡的乘客数、乘客的船舱等级、性别以及年龄层(儿童或成人)。
library(vcd)
library(grid)
Titanic
## , , Age = Child, Survived = No
##
## Sex
## Class Male Female
## 1st 0 0
## 2nd 0 0
## 3rd 35 17
## Crew 0 0
##
## , , Age = Adult, Survived = No
##
## Sex
## Class Male Female
## 1st 118 4
## 2nd 154 13
## 3rd 387 89
## Crew 670 3
##
## , , Age = Child, Survived = Yes
##
## Sex
## Class Male Female
## 1st 5 1
## 2nd 11 13
## 3rd 13 14
## Crew 0 0
##
## , , Age = Adult, Survived = Yes
##
## Sex
## Class Male Female
## 1st 57 140
## 2nd 14 80
## 3rd 75 76
## Crew 192 20
mosaic(~Class+Sex+Age+Survived,data = Titanic,shade=TRUE,legend=TRUE)
11.5 补充s3d$plane3d() 函数
其中s3d指三维散点图,s3d$plane3d()则是在s3d的三维散点图中绘制平面。配合fit使用则生成回归平面。
11.6 补充scale_color_brewer(palette = )和调色板
scale_color_brewer(palette = )是用于设置调色板
调色板可用 RColorBrewer 包提供的函数 display.brewer.all() 来查看
library(RColorBrewer)
display.brewer.all()
11.7 补充colors()函数
该函数可以返回所有657种颜色的名称
完整教程请查看
R语言基础学习手册
相关文章:
R语言基础| 中级绘图
写在前面 前面第六章的图形主要是展示单分类变量或连续型变量的分布情况。本章主要研究二元变量或多元变量关系的可视化。更多教程可参考: R语言基础学习手册 图片集锦: 11.1 散点图 1)添加最佳拟合曲线的散点图: 绘制汽车重…...
TANGO - 数字人全身动作生成
文章目录 一、关于 TANGO演示视频(YouTube)📝发布计划 二、⚒️安装克隆存储库构建环境 三、🚀训练和推理1、推理2、为自定义字符创建图形 一、关于 TANGO TANGO 是 具有分层音频运动嵌入 和 扩散插值的共语音手势视频再现 由东…...
从configure.ac到构建环境:解析Mellanox OFED内核模块构建脚本
在软件开发过程中,特别是在处理复杂的内核模块如Mellanox OFED(OpenFabrics Enterprise Distribution)时,构建一个可移植且高效的构建系统至关重要。Autoconf和Automake等工具在此过程中扮演着核心角色。本文将深入解析一个用于准备Mellanox OFED内核模块构建环境的Autocon…...
深入理解 Android 中的 KeyguardManager
深入理解 Android 中的 KeyguardManager 引言 在 Android 系统中,KeyguardManager 是一个重要的系统服务,负责管理设备的锁屏界面(Keyguard)。锁屏界面是设备安全性的第一道防线,用于防止未经授权的用户访问设备。Ke…...
在Vue3项目中使用svg-sprite-loader
1.普通的svg图片使用方式 1.1 路径引入 正常我们会把项目中的静态资源放在指定的一个目录,例如assets,使用起来就像 <img src"../assets/svgicons/about.svg" /> 1.2封装组件使用 显然上面的这种方法在项目开发中不太适用,每次都需…...
Linux(Centos 7.6)命令详解:pwd
1.命令作用 显示当前工作目录的完整路径(Print Working Directory) 2.命令语法 Usage: pwd [-LP] 3.参数详解 -L,显示逻辑路径,遵循符号链接;这是默认选项。-P,显示物理路径,不遵循符号链接。 4.常用用例 1.-L参…...
【iOS Swift Moya 最新请求网络框架封装通用】
【iOS Swift Moya 最新请求网络框架封装通用】 前言框架结构1.API定义(TargetType)2. 配置MoyaProvider3. 网络管理器4. 使用示例注意事项进一步优化 前言 设计一个基于Moya的网络请求框架,可以提供灵活的网络请求管理,例如设置请…...
【算法学习】——设施选址问题(动态规划)
题目描述 在一条高速公路附近有 V 个村庄,选择 P 个村庄在其附近建立邮局,要求每个村庄到最近的邮局的距离和最小(1<V<300,1<P<30)。 问题分析 这个问题是一个经典的设施选址问题(Facility Location Problem&#…...
Linux——修改文件夹的所属用户组和用户
一、命令 举例: 授权 MOT17 文件夹 给 hust_xxx 用户: sudo chown -R hust_xxx:hust_xxx MOT17参考 Linux授权文件夹给用户...
我用Ai学Android Jetpack Compose之Text
这篇开始学习各种UI元素,答案来自 通义千问,通义千问没法生成图片,图片是我补充的。 下述代码只要复制到第一个工程,做一些import操作,一般import androidx.compose包里的东西,即可看到预览效果。完整工程代…...
H5通过URL Scheme唤醒手机地图APP
1.高德地图 安卓URL Scheme:baidumap:// 官方文档:https://lbs.amap.com/api/amap-mobile/guide/android/navigation IOS URL Scheme:iosamap:// 官方文档:https://lbs.amap.com/api/amap-mobile/guide/ios/navi HarmonyOS NEXT U…...
【Java数据结构】二叉树
1.树型结构 1.1树的概念 树是一种非线性的数据结构,由n个结点组成的具有层次关系的集合。下面是它的特点: 根结点是没有前驱的结点(没有父结点的结点)子结点之间互不相交除了根结点外,其它结点都只有一个父结点n个结…...
Golang设计模式目录
go语言实现设计模式 1 文章目录: 1.1 创建型模式 1.Golang设计模式之工厂模式2.Golang设计模式之抽象工厂模式3.Golang设计模式之单例模式4.Golang设计模式之建造者模式5.Golang设计模式之原型模式 1.2 结构型模式 6.Golang设计模式之适配器模式7.Golang设计模式之桥…...
vue3+Echarts+ts实现甘特图
项目场景: vue3Echartsts实现甘特图;发布任务 代码实现 封装ganttEcharts.vue <template><!-- Echarts 甘特图 --><div ref"progressChart" class"w100 h100"></div> </template> <script lang"ts&qu…...
nginx-灰度发布策略(split_clients)
一. 简述: 基于客户端的灰度发布(也称为蓝绿部署或金丝雀发布)是一种逐步将新版本的服务或应用暴露给部分用户,以确保在出现问题时可以快速回滚并最小化影响的技术。对于 Nginx,可以通过配置和使用不同的模块来实现基于…...
SQL中聚类后字段数据串联字符串方法研究
在 SQL 中,使用 聚类(GROUP BY) 后将某个字段的数据串联为一个字符串,常见的方法包括以下几种,取决于数据库管理系统(DBMS)的具体支持功能: 1. 使用 GROUP_CONCAT (MySQL…...
vue3组件化开发优势劣势分析,及一个案例
Vue 3 组件化开发的优势和劣势 优势 可复用性: 组件可以重复使用,减少代码冗余,提高开发效率。 可以在不同的项目中复用组件,提升开发速度。 可维护性: 组件化开发使得代码结构清晰,易于维护。 每个…...
Springboot SAP Docker 镜像打包问题
问题类1,sapjco.jar 未识别到:Caused by: java.lang.NoClassDefFoundError: com/sap/conn/jco/ext/DestinationDataProvider 1./deploy/lib/ 文件下放sapjco3.jar、libsapjco3.so、sapjco3.dll 2.docker文件核心内容: COPY /deploy/lib/sap…...
nmap探测Web服务
HTTP服务 探测基本认证信息 nmap --script http-auth [目标]探测默认账户 nmap --scripthttp-default-accounts -p [端口] [目标]检查是否存在风险方法 nmap --script http-methods [目标]探测访问一个网页的时间 nmap --scripthttp-chrono -p 80 [目标]提取HTTP注释信息 nmap…...
【学习总结|DAY028】后端Web实战(部门管理)
在 Web 后端开发领域,构建高效、规范且功能完备的系统是核心目标。本文将围绕 Tlias 智能学习辅助系统的后端开发展开,详细阐述从开发准备工作到各部门管理功能实现,以及日志技术应用的全过程,为开发者提供全面的实践参考。 一、…...
Servlet 和 Spring MVC:区别与联系
前言 在 Java Web 开发中,Servlet 和 Spring MVC 是两个重要的技术。Servlet 是 Java Web 的基础组件,而 Spring MVC 是一个高级 Web 框架,建立在 Servlet 的基础之上,提供了强大的功能和易用性。这篇文章将从定义、原理、功能对…...
【君正T31开发记录】12.编译工具相关总结及介绍
移植交叉工具包的时候,发现这是很多工具的集合包;以及写makefile的时候,也需要了解下这些工具的作用及用法,这里总结记录一下常见的工具及相关用法。 g C编译器,用于编译C源代码文件,这个很常见࿰…...
Python 开发框架搭建简单博客系统:代码实践与应用
在当今数字化时代,博客作为一种流行的信息分享和交流平台,拥有广泛的受众。Python 以其强大的功能和丰富的库,为构建博客系统提供了理想的技术支持。本文将详细介绍如何利用 Python 开发框架搭建一个简单博客系统,包括功能实现、代…...
Java 正则表达式入门与应用(详细版)
正则表达式(Regular Expression,简称Regex)是一种文本模式匹配工具,在许多编程语言中都得到了广泛应用。Java 作为一种强大的编程语言,提供了对正则表达式的内建支持,使得在字符串处理、数据验证和文本解析…...
高效内存管理与调试技巧:深入解析 AddressSanitizer
在现代 C开发中,内存管理是一个至关重要但也容易出错的领域。即使使用了智能指针和其他高效工具,复杂的项目仍可能出现内存泄漏、非法访问等问题。为了解决这些问题,Google 开发了一个强大的工具——AddressSanitizer (ASan)。本文将详细介绍…...
力扣第137题:只出现一次的数字 II C语言解法
力扣第137题:只出现一次的数字 II C语言解法 题目描述 给定一个整数数组 nums,其中每个元素出现三次,除了一个元素出现一次。找出那个只出现一次的元素。 说明: 你的算法应该具有线性时间复杂度。你不可以使用额外的空间&…...
【Qt】控件概述和QWidget核心属性1(enabled、geometry、windowTitle、windowIcon、QRC机制)
一、控件概念 界面上各种元素、各种部分的统称(如按钮、输入框、下拉框、单选复选框...) Qt作为GUI开发框架,内置了各种的常用控件,并支持自定义控件。 二、控件体系发展 1.没有完全的控件,需要使用绘图API手动绘制…...
25年1月更新。Windows 上搭建 Python 开发环境:PyCharm 安装全攻略(文中有安装包不用官网下载)
python环境没有安装的可以点击这里先安装好python环境,python环境安装教程 安装 PyCharm IDE 获取 PyCharm PyCharm 提供两种主要版本——社区版(免费)和专业版(付费)。对于初学者和个人开发者而言,社区…...
软件工程大复习之(四)——面向对象与UML
4.1 面向对象概述 面向对象(OO)是一种编程范式,它将数据和处理数据的方法封装在对象中。面向对象的主要概念包括: 对象:实例化的数据和方法的集合。类:对象的蓝图或模板。封装:隐藏对象的内部…...
前端基础函数算法整理应用(sort+reduce+date+双重for循环)
文章目录 基础函数算法reduce 函数算法sort 函数算法时间排序1. 对日期字符串数组进行排序2. 对包含日期对象的数组进行排序3. 对包含时间戳的数组进行排序4. 对包含日期时间信息的对象数组进行排序 基础函数算法 一、排序算法 冒泡排序(Bubble Sort) …...
web系统漏洞攻击靶场
摘 要 互联网极速发展的同时,也会带来一些安全性的风险,一些不为人知的安全问题也逐渐暴露出来。近年来,媒体不断披露了许多网络安全事故,许多网络应用程序被黑客攻击,导致内部数据外泄,人们开始认识到网络…...
苍穹外卖-day07(Spring Cache 购物车业务逻辑)
内容 缓存菜品缓存套餐添加购物车查看购物车清空购物车 功能实现:缓存商品、购物车 效果图: 1. 缓存菜品 1.1 问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增…...
win10 VS2019上libtorch库配置过程
win10 VS2019上libtorch库配置过程 0 引言1 获取libtorch2 在VS上配置使用libtorch库3 结语 0 引言 💻💻AI一下💻💻 libtorch库是一个用于深度学习的C库,是PyTorch的官方C前端。它提供了用于构建和训练深度学习模…...
git 常用命令和本地合并解决冲突
目录 一、常用命令 二、本地可视化合并分支解决冲突 一、常用命令 最近,使用mac电脑,无法直接使用小乌龟进行可视化操作,现在记录一些常用命令。 拉取: git clone <git url> 仅拉起某个单独分支: git clo…...
Elasticsearch 创建索引 Mapping映射属性 索引库操作 增删改查
Mapping Type映射属性 mapping是对索引库中文档的约束,有以下类型。 text:用于分析和全文搜索,通常适用于长文本字段。keyword:用于精确匹配,不会进行分析,适用于标签、ID 等精确匹配场景。integer、long…...
Objective-C语言的数据结构
Objective-C语言中的数据结构 Objective-C是一种面向对象的编程语言,其在苹果公司的软件开发中得到了广泛应用。它主要用于开发macOS和iOS应用程序。虽然Objective-C有许多丰富的特性,但在程序设计中,数据结构仍然是构建任何应用程序的基础。…...
智能水文:ChatGPT等大语言模型如何提升水资源分析和模型优化的效率
大语言模型与水文水资源领域的融合具有多种具体应用,以下是一些主要的应用实例: 1、时间序列水文数据自动化处理及机器学习模型: ●自动分析流量或降雨量的异常值 ●参数估计,例如PIII型曲线的参数 ●自动分析降雨频率及重现期 ●…...
ETL的工作原理
ETL的工作原理 什么是ETL_云计算主题库-阿里云 ETL的工作原理可以分为三个主要的步骤:Extract(提取)、Transform(转换)、Load(加载)。 工作步骤 描述 Extract (提取)…...
黑马头条平台管理实战
黑马头条 08平台管理 1.开始准备和开发思路1.1.开发网关1.2编写admin-gateway 代码 2.开发登录微服务2.1编写登录微服务 3.频道管理4.敏感词管理5.用户认证审核6.自媒体文章人工审核99. 最后开发中碰到的问题汇总1.关于nacos 配置 问题2.在开发频道管理新增频道后端无法接收到前…...
电池管理系统(BMS)架构详细解析:原理与器件选型指南
BMS(电池管理系统)架构详细讲解 从你提供的BMS(Battery Management System)架构图来看,主要涉及到电池监控模块、通信模块、功率控制模块等部分。下面我将详细讲解该架构的各个功能模块及其工作原理。 1. 电池管理核…...
SpringBoot环境和Maven配置
SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…...
lambda用法及其原理
目录 lambda形式lambda用法1.sort降序2.swap3.捕捉列表 习题解题 lambda形式 [capture-list](parameters)->return type{function boby}[capture-list]:[捕捉列表]用于捕捉函数外的参数,可以为空,但不能省略;(parameters) &am…...
Postgresql源码(139)vim直接修改postgresql表文件的简单实例
1 前言 PG可以用pageinspect方便的读取查看表文件。本篇介绍一种用vim查看、编辑的方法,案例比较简单,主要分享原理。 修改表文件和controlfile是非常危险的行为,请不要在生产尝试。 2 用例 简化问题,用简单编码的数据类型。 d…...
Lianwei 安全周报|2025.1.2
以下是本周「Lianwei周报」,我们总结推荐了本周的政策/标准/指南最新动态、热点资讯和安全事件,保证大家不错过本周的每一个重点! 政策/标准/指南最新动态 01 国家数据局等五部门印发《关于促进企业数据资源开发利用的意见》 为充分释放企业…...
Vue3-跨层组件通信Provide/Inject机制详解
Vue 3 中的 Provide 和 Inject 机制是专为跨层级传递数据而设计的,适用于祖先组件和后代组件之间的通信。与props 和 emits 不同,Provide/Inject 可以跨越多个层级进行数据传递,而不需要逐层传递。 1. Provide provide 是一个在祖先组件中提…...
springcloud 介绍
Spring Cloud是一个基于Spring Boot的微服务架构解决方案集合,它提供了一套完整的工具集,用于快速构建分布式系统。在Spring Cloud的架构中,服务被拆分为一系列小型、自治的微服务,每个服务运行在其独立的进程中,并通过…...
css预处理器sass
在前端开发的世界中,CSS 是构建网页样式的基础。然而,随着项目规模的增大,纯 CSS 的编写和维护往往会变得复杂而繁琐。为了解决这些痛点,Sass(Syntactically Awesome Style Sheets)应运而生。Sass 是一种 C…...
匠人天工Ai浮雕网站创新发布了ZBrush插件,提效500%,为AI+数字雕刻行业带来新的活力
2025年1月6日,杭州——杭州仓颉造梦数字科技公司旗下产品匠人天工近日宣布推出一款创新的ZBrush插件,旨在为AI数字雕刻行业带来前所未有的效率提升。该插件通过一系列智能化功能,大幅简化了数字雕刻的建模流程,使建模效率提高了50…...
解决 Pangolin 版本不兼容导致的编译错误
在使用 Pangolin 库时,有时候会遇到由于版本不兼容而导致的编译错误。本文将通过一个具体的错误案例,展示如何识别和解决这种问题。 问题描述 在编译时,遇到如下编译错误: /usr/local/include/pangolin/gl/glsl.hpp: In member…...
day01_ Java概述丶开发环境的搭建丶常用DOS命令
编程常识 什么是编程? 所谓编程,就是人们可以使用编程语言对计算机下达命令,让计算机完成人们需要的功能。 编程语言的发展历程 第一代:机器语言 ,机器语言由数字组成所有指令。计算器解析运行速度,最快…...