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包可以添加更丰富的图形渲染功能,可以绘制出更精美的图形效果。
相关文章
- AE插件GEOLayers3 for Mac(AE地图绘制插件)
- matlab绘制论文折线图
- R 绘制交互式地图 Mapview
- matlab直方图绘制[通俗易懂]
- 结构建模设计——Solidworks软件之绘制一个手机支架模型,使用3D打印技术输出实物的全流程实战
- Matlab由三维散点绘制三维曲面(含等高线,剖面图)「建议收藏」
- Python绘制幸运草,见者皆幸运
- OpenCV-Python学习(13)—— OpenCV 多边形填充与绘制(cv.fillPoly、cv.polylines)
- Python+Matplotlib绘制双层环状图
- 用Python当中Plotly.Express模块绘制几张图表,真的被惊艳到了!!
- C/C++ ImGUI劫持Dx9绘制窗体
- Grafana 监控面板绘制流程
- python通过PyGame绘制图像并保存为图片文件详解编程语言
- 讲解.NET环境下绘制模糊数学中隶属函数分布图
- android图像绘制(三)画布刷屏问题记录
- 深入c#绘制验证码的详解