https://www.rdocumentation.org/packages/customLayout/versions/0.2.0
https://mp.weixin.qq.com/s/zbp8pOQcNB4XBBF5SCg5GA
customLayout用于拼图特别方便,尤其是仪表盘布局
支持R内置的base绘图对象,ggplot2对象(与grid结合 )
Hide
”library(ggplot2)library(customLayout)
通过设置简单的数字矩阵以及对应的宽高比,可以非常方便的设置出来数字拼图
关键函数:
mat数字矩阵必须从1开始,且必须连续
其它拼图包没有的功能,非常好用
跟合并矩阵类似。分为行合并和列合并
这个功能也是其它包没有的,非常有用
关键函数:
参数lay表示大画布,参数newlay表示要嵌套进去的小画布,field表示指定要嵌套的区域编号
关键函数:
cowplot是一个ggplot2包的简单补充,意味着其可以为ggplot2提供出版物级的主题等。
更重要的是,这个包可以组合多个”ggplot2”绘制的图为一个图,并且为每个图加上例如A,B,C等标签,
这在具体的出版物上通常是要求的。 语法结构与ggplot类似,将ggplot2图作为一个对象置于 ggdraw() 中
表达式:
draw_plot(plot, x = 0, y = 0, width = 1, height = 1, scale = 1)
draw_text(text, x = 0.5, y = 0.5, size = 14, hjust = 0.5, vjust = 0.5,...)
draw_plot_label(label, x = 0, y = 1, hjust = -0.5, vjust = 1.5, size = 16, fontface = "bold", family = NULL, colour = NULL, ...)
参数解释:
grid中文翻译为网格,可将其解释为画布分割,通过设定相应的参数,从而可以任意的摆放图形
常用函数:
语法:
参数解释:
layout参数
综合例子
子母图,主要是形成局部放大的效果,既可以从整体上对比,又兼顾特别小的数据组,或特别密的数据点可以查看,而没有必要单独做2张图
<pre style="box-sizing: border-boxfont-family: Monaco, Menlo, Consolas, "Courier New", monospacefont-size: 13pxwhite-space: pre-wrapdisplay: blockpadding: 9.5pxmargin: 0px 0px 10pxline-height: 1.42857color: rgb(51, 51, 51)word-break: break-alloverflow-wrap: break-word !importantbackground-color: whiteborder: 1px solid rgb(204, 204, 204)border-radius: 4pxmax-width: 100%font-variant-numeric: normalfont-variant-east-asian: normalletter-spacing: 0.544pxtext-align: justifywidows: 1overflow: auto">## png
蝴蝶图
主要函数:
语法:
参数解释:
把绘图对象添加到列表总,并把该列表传递给 grid.arrange() 函数中的grobs参数
子母图
grid包可以画字母图
安装gridExtra包后,ggplot2中多了一个 ggplotGrob( )函数,可以创建grob对象参数
rm(list=ls())##清除之前数据
library(rms) ###加载rms包#
library(foreign)
library(survival)
library(rmda)
##install.packages("DynNom")
library(DynNom)
setwd("C://Users//zhanglingyu//Desktop//测试") #设置工作目录
rt<- read.table('测试.txt',header=T,sep="\t")
head(rt) #查看前5行的数据
str(rt)
##接着对所有变量数据进行打包
ddist <- datadist(rt) #将数据打包
options(datadist='ddist')
model1<- lrm(rt$fustat ~ Age+Gender+Tau+EMPG+Glu+HCY+VB12+ALB, data = rt)
summary(model1)
par(mgp=c(1.6,0.6,0),mar=c(2,2,2,2)) ##设置画布
nomogram <- nomogram(model1,fun=function(x)1/(1+exp(-x)), ##逻辑回归计算公式
fun.at = c(0.001,0.01,0.05,seq(0.1,0.9,by=0.1),0.95,0.99,0.999),#风险轴刻度
funlabel = "Risk of Alzheimer Disease", #风险轴便签
lp=T, ##是否显示系数轴
conf.int = F, ##每个得分的置信度区间,用横线表示,横线越长置信度越
abbrev = F#是否用简称代表因子变量
)
plot(nomogram,
#1.变量与图形的占比
xfrac=.35,
#2.变量字体加粗
cex.var=1,
#3.数轴:字体的大小
cex.axis=0.8,
#4.数轴:刻度的长度
tcl=-0.5,
#5.数轴:文字与刻度的距离
lmgp=0.3,
#6.数轴:刻度下的文字,1=连续显示,2=隔一个显示一个
label.every=1,
#7.1个页面有几个数轴(这个可以压缩行间距)
naxes=13,
#8.垂直线的颜色.
col.grid=gray(c(0.8, 0.95)),
#9.线性预测轴名字
lplabel="Linear Predictorlp",
#10变量分数名字
points.label='Points',
#11总分名字
total.points.label='Total Points',
force.label=F#没啥用TRUE强制标记的每个刻度线都绘制标签,我也没研究明白
)
#运行以展示Nomogram每个变量的分数
model1
##生成改良诺模图
plot(nomogram,col.grid = c("Tomato2","DodgerBlue"))
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画双坐标轴曲线