如何用R绘制双坐标图?

Python013

如何用R绘制双坐标图?,第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画双坐标轴曲线

用最基础的axis()函数,假设横轴是5月的每一天,纵轴是每天的销售量从0到100

首先你把横轴纵轴要打的东西分别放在2个向量month和sales

month<-paste(5,1:31,sep="/")

sales<-sample(100,31) #我随机从1到100里抽31个数

然后你把plot(1:31,sales,xaxt="n",xlab="Each day")打出来 xaxt="n"就是先不显示x的刻度

下面跟

>axis(1,labels=month,at=1:31,las=3) 1是你要对x轴作修改,labels就是你要打的内容,at就是你要多少个刻度(这里只能是1到31),las是这些刻度的显示形式,3就是竖着

数据准备

1 基础图形绘制

2 禁用坐标轴

禁用全部坐标轴

禁用坐标轴但保留边框

禁用部分坐标轴

3 坐标轴参数设置

函数:axis(side, at = NULL, labels = TRUE, tick = TRUE, line = NA, pos = NA, outer = FALSE, font = NA, lty = "solid", lwd = 1, lwd.ticks = lwd, col = NULL, col.ticks = NULL, hadj = NA, padj = NA, gap.axis = NA, ...)

side表示坐标轴位置,取值1、2、3、4分别代表下、左、上、右;

at表示需要添加刻度的数值,默认会根据变量的取值范围计算几个合适的刻度,也可以手工指定;

labels表示刻度标签,指定在刻度上需要标记的内容,默认就是刻度对应的值;

tick是逻辑变量,取TRUE表示显示坐标轴和刻度线,取FALSE时,坐标轴线和刻度线不画出;

line表示坐标轴线位置与图像边框的距离,取负数时会画在图像边框以内;

pos 表示轴线所在的位置; line.outer取TRUE时,坐标轴将画在画布边缘处; font.axis表示坐标轴刻度值的字体,font=1表示正体,2表示黑体,3表示斜体,4表示黑斜体。

lty表示线型,用在axis函数中表示坐标轴线型;

lwd表示线的粗细,用在axis函数中表示坐标轴线粗细;

lwd.ticks表示刻度线粗细。

col表示图的颜色,用在axis函数中表示坐标轴线和坐标刻度线的颜色;

col.axis表示坐标轴刻度值的颜色;

col.ticks表示坐标轴刻度线的颜色;

hadj指将刻度值沿平行坐标轴方向调整的距离;

padj指将刻度值沿垂直坐标轴方向调整的距离;

las表示坐标刻度值文字方向,las=0表示文字方向与坐标轴平行,1表示始终为水平方向,2表示与坐标轴垂直,3表示终为垂直方向。

tck表示刻度线长度。

4 次要刻度线

minor.tick(nx=n,ny=n,tick.ration=n)

nx和ny分别指定了X轴和Y轴每两条主刻度线之间通过次要刻度线划分得到的区间个数。 tick.ratio表示次要刻度线相对于主刻度线的大小比例。

参考资料:

《R语言实战》(中文版),人民邮电出版社,2013.

R语言作图:坐标轴设置, https://blog.csdn.net/weixin_40628687/article/details/79254791

R语言低级绘图函数-axis, https://www.cnblogs.com/xudongliang/p/6762618.html