《R语言实战》自学笔记68-相关图和马赛克图

Python012

《R语言实战》自学笔记68-相关图和马赛克图,第1张

数据准备

corrgram包corrgram()函数。

corrgram(x, order=, panel=, text.panel=, diag.panel=)

其中,x是一行一个观测的数据框。当order = TRUE时,相关矩阵将使用主成分分析法对变量

重排序,这将使得二元变量的关系模式更为明显。选项panel设定非对角线面板使用的元素类型。你可以通过选项 lower.panel和upper.panel来分别设置主对角线下方和上方的元素类型。而text.panel和diag.panel选项控制着主对角线元素类型。

下三角部分,默认地,蓝色和从左下指向右上的斜杠表示单元格中的两个变量呈正相关。反过来,红色和从左上指向右下的斜杠表示变量呈负相关。色彩越深,饱和度越高,说明变量相关性越大。相关性接近于0的单元格基本无色。上三角单元格用饼图展示了相同的信息。颜色的功能同上,但相关性大小由被填充的饼图块的大小来展示。正相关性将从12点钟处开始顺时针填充饼图,而负相关性则逆时针方向填充饼图。

可以使用colorRampPallette()函数来指定四种颜色。

colorRampPalette 函数支持自定义的创建一系列的颜色梯度。

马赛克图(Mosaic Plot)是利用列联表对分类数据进行的图形表示,它可观察两个或多个分类变量之间的关系。

整个图形的长、宽概率值均为1,其被划分为多个矩形,每个矩形边长与所关联分类变量的概率分布成比例。

在马赛克图中,嵌套矩形面积正比于单元格频率,其中该频率即多维列联表中的频率。颜色和/或阴影可表示拟合模型的残差值。

vcd包mosaic()函数绘制马赛克图

mosaic()函数可按如下方式调用

mosaic(table)

其中table是数组形式的列联表。

另外也可用

mosaic(formula, data=)

其中formula是标准的R表达式,data设定一个数据框或者表格。

shade=TRUE将根据拟合模型的皮尔逊残差值对图形上色。

legend=TRUE 将展示残差的图例。

图表解读:图3反映的2021年品种a相对b而言,品种a的v1值大的比例较b高,2020年,两品种v1值大小均衡;2020年v1值在N1条件下数值大的比例较N2高,2021年两氮水平平衡

参考资料:

plot(x, y = NULL, type = "p", xlim = NULL, ylim = NULL, log = "", main = NULL, sub = NULL, xlab = NULL, ylab = NULL, ann = par("ann"), axes = TRUE, frame.plot = axes, panel.first = NULL, panel.last = NULL, asp = NA, xgap.axis = NA, ygap.axis = NA,   ...) x,y  用于横纵坐标作图的数据对象。 type 图类型(线条和点类型),使用格式type=" "。                                                    type="p"显示为空心点。plot                                                    type="l"显示为线条。line                                                    type="b"显示为空心点和线条。both                                                    type="c"显示为无点和线条。                                                    type="o"显示为空心点和线条,线穿过空心点。                                                    type="s"/"S"显示为阶梯线。                                                    type="h"显示为直方图样的垂直线。                                                    type="n"显示为无点和无线条。 xlim/ylim 用于指定图的x轴和y轴的范围,使用格式:xlim=c(x1,x2), ylim=c(y1,y2)。 xlab/ylab 用于给图的x轴和y轴添加标签,使用格式:xlab="xlab",ylab="ylab"。 main 用于对plot添加主标题, main="   "。 sub   用于对plot添加副标题, sub="   "。 log   用于对x或者y值取log。log="x"/"y"/"xy"。 ann  使用T/F对plot中的标题,x轴标签,y轴标签是否显示进行定义。 axes  使用T/F对坐标轴是否显示进行定义。 frame.plot  使用T/F对画图外框是否显示进行定义。 panel.first  参数还没弄懂,panel.first="grid(8,8)"对背景线进行定义。 asp  表示y/x的纵横比。 lty   用于线条类型的定义,指定值为整数,lty="1"。                                                    lty="0"显示为空白,即无线条。                                                    lty="1"显示为实线线条。                                                    lty="2"显示为虚线线条。                                                    lty="3"显示为点状线条。                                                    lty="4"显示为点虚线线条,点和虚线线条间隔。                                                    lty="5"显示为长虚线。                                                    lty="1"显示为双破折号线条。

library(plotrix)

twoord.plot(lx,ly,rx,ry,data=NULL,main="",xlim=NULL,lylim=NULL,rylim=NULL,

mar=c(5,4,4,4),lcol=1,rcol=2,xlab="",lytickpos=NA,ylab="",ylab.at=NA,

rytickpos=NA,rylab="",rylab.at=NA,lpch=1,rpch=2,

type="b",xtickpos=NULL,xticklab=NULL,halfwidth=0.4,axislab.cex=1,

do.first=NULL,xaxt="s",...)

xval1 <- seq.Date(as.Date("2017-01-02"), as.Date("2017-01-10"), by="day")

xval2 <- seq.Date(as.Date("2017-01-01"), as.Date("2017-01-15"), by="day")

going_up<-seq(3,7,by=0.5)+rnorm(9)

going_down<-rev(60:74)+rnorm(15)

twoord.plot(2:10,going_up,1:15,going_down,xlab="Sequence",

 ylab="Ascending values",rylab="Descending values",lcol=4,

 main="Plot with two ordinates - points and lines",

 do.first="plot_bg()grid(col=\"white\",lty=1)")

 axis.Date(1,xval2)

library(ggplot2)

library(gtable)

library(grid)

grid.newpage()

# two plots

p1 <- ggplot(mtcars, aes(mpg, disp)) + geom_line(colour = "blue") + theme_bw()

p2 <- ggplot(mtcars, aes(mpg, drat)) + geom_line(colour = "red") + theme_bw() %+replace% theme(panel.background = element_rect(fill = NA))

# extract gtable

g1 <- ggplot_gtable(ggplot_build(p1))

g2 <- ggplot_gtable(ggplot_build(p2))

# overlap the panel of 2nd plot on that of 1st plot

pp <- c(subset(g1$layout, name == "panel", se = t:r))

g <- gtable_add_grob(g1, g2$grobs[[which(g2$layout$name == "panel")]], pp$t, pp$l, pp$b, pp$l)

# axis tweaks

ia <- which(g2$layout$name == "axis-l")

ga <- g2$grobs[[ia]]

ax <- ga$children[[2]]

ax$widths <- rev(ax$widths)

ax$grobs <- rev(ax$grobs)

ax$grobs[[1]]$x <- ax$grobs[[1]]$x - unit(1, "npc") + unit(0.15, "cm")

g <- gtable_add_cols(g, g2$widths[g2$layout[ia, ]$l], length(g$widths) - 1)

g <- gtable_add_grob(g, ax, pp$t, length(g$widths) - 1, pp$b)

# draw it

grid.draw(g)

用ggplot2画个双坐标也太难了吧。。。。

d <- data.frame(name=c("zhao","qian","sun","li"),weight=c(62,58,79,60),height=c(178,169,180,173))

x <- d$name

y1 <- d$weight

y2 <- d$height

bar <- barplot(y1,xlim=c(0,5),ylim=c(0,100),ylab="Weight",col="blue",col.axis="blue",col.lab="blue")

mtext(x,side=1,line=1,at=bar,col="black")

mtext("Name",side=1,line=3,col="black")

par(new=T)    ## 创建新的画布,类似于ggplot2中的图层叠加

plot(bar,y2,axes=F,xlim=c(0,5),ylim=c(100,190),xlab="",ylab="",col="red",type="b")

axis(4,col="red",col.ticks="red",col.axis="red")

mtext("Heigth (cm)",side=4,line=3,col="red")

若画图时需要将纵坐标方向改变,可以采用取相反数的方法。正常情况下,y轴是从下往上依次增大,可以让所有数值乘以-1,使y轴从下往上依次减小,然后通过axis函数修改y轴的label。

R语言学习  绘制双坐标轴(双y轴)的方法 plotrix_瞎掰大数据_新浪博客

利用ggplot2画双坐标轴曲线