美文网首页
如何用R绘制双坐标图?

如何用R绘制双坐标图?

作者: 生信菜菜鸟 | 来源:发表于2020-07-09 17:05 被阅读0次

    使用plotrix包

    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",...)

    Example

    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)


    使用ggplot2包

    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画双坐标轴曲线

    相关文章

      网友评论

          本文标题:如何用R绘制双坐标图?

          本文链接:https://www.haomeiwen.com/subject/ywnxhftx.html