zl程序教程

您现在的位置是:首页 >  其它

当前栏目

R绘制双坐标图

绘制 坐标
2023-06-13 09:17:27 时间

ggplot2作图美观,所以在使用R时,习惯使用ggplot2进行可视化,但ggplot2有个很大的遗憾,就是做双坐标图非常麻烦,所以当需要使用双坐标展示数据时,常常另寻它法

一、使用R基本作图命令绘制双坐标

其中,有两个关键点,一是使用par(new=T)命令,在原有坐标中添加新图形,二是在添加新图形时先隐藏坐标轴。

set.seed(1)
par(mar=c(4,4,4,4),mgp=c(2.5,1,0))
# 生成标准正态分布数据
x <- rnorm(n=1000, mean = 0, sd = 1)
# 直方图
hist(x, ylab="", main="", axes=T, freq=T, col="steelblue")
# 添加边框
box()
# 设置左坐标轴
axis(side=2, col.ticks = "steelblue", col.axis="steelblue")
mtext("Frequency", side = 2, line=2, col="steelblue")
# 在原有坐标中添加新图形
par(new=T)
# 生成概率密度数据
x2 <- density(x)$x
y2 <- density(x)$y
# 概率密度曲线
plot(x2, y2, type="l", axes=F, xlab="", ylab="", main="", col="red")
# 设置右坐标轴
axis(side=4, ylim=c(0,max(y2)+0.05), col.ticks = "red", col.axis="red")
mtext("Density", side = 4, line=2, col="red")
# 设置标题
title(main="双坐标图")

绘制图形如下:

一、使用plotrix包绘制双坐标

该包为绘制多图、多坐标提供了便利,具体命令及参数可以参考官方文档。接下来仍然以上面的数据为例,绘制双坐标图。

library(plotrix)
set.seed(1)
# 生成标准正态分布数据
x<-rnorm(n=1000, mean = 0, sd = 1)
# 直方图
h<-hist(x, main="", freq = T)
# 提取直方图的中心和高度
x1<-h$mids
y1<-h$counts
# 生成概率密度数据
x2<-density(x)$x
y2<-density(x)$y
# 绘制双坐标图
twoord.plot(lx=x1,ly=y1,rx=x2,ry=y2, #设置左右图的数据
            type=c("bar","l"), #设置左右图的图形类型
            lcol="steelblue",rcol="red", #设置左右图的颜色
            xlab="x",
            ylab="Frequency",rylab="Density", #设置左右轴的标签
            lylim=c(0,max(y1)+10),rylim=c(0,max(y2)+0.05),#设置左右轴的刻度范围
            #do.first='plot_bg(col="gray");grid(col="white",lty=2)', #设置背景和网格线
            halfwidth = 0.25) # 设置直方图宽度的一半值
# 设置标题
title(main="双坐标图")

绘制图形如下:

两种方法绘制的图形非常相近,但plotrix包可以添加更丰富的图形渲染功能,可以绘制出更精美的图形效果。