R语言绘图之双坐标轴实例
2020-05-16 本文已影响0人
采星星的小太阳BavaLI
前面的博客我们详细介绍了plot()函数的使用即折线图的绘制,尤其是plot()函数他很关键,很重要,如果您不了解,那么你可能不知道我再说什么。
注:需要数据的可以发简信找我要,,,,,,,,
#加载数据集
library(readxl)
stock = read_excel("./stock.xlsx")
实验一 : 一个图像显示随着时间变化,收盘价和股民的信心指数的变化趋势
先来一个错误的绘图实例:
plot(stock$date
,stock$SH_closing_price
,type='l')
#你会发现lines并没有绘制上去
lines(stock$date
,stock$investor_confidence_index
,lty=2)
你会发现lines并没有绘制上去

怎么回事呢?还记得range函数嘛?我们来查看一下x,y的范围看一看!

原因就是x,y相差太大了,接下来我们叫解决这个问题!
解决方案1,调整y轴的刻度
plot(stock$date
,stock$SH_closing_price
,type="l"
,ylim=c(20,50000))
lines(stock$date
,stock$investor_confidence_index
,lty=2)

图现在倒是绘制上去了,但是聪明的你马上就发现问题
#产生的问题,本身信心指数是有波动的
#收盘价也是有波动的,经过放大比例尺,导致原先有波动的数据,也看不出来
#失去了数据的原有价值,容易给别人造成歧义
解决方案二,绘制子图,但是你又会发现问题:对比性不强
par(mfrow=c(1,2))
plot(stock$date
,stock$SH_closing_price
,type="l"
,xlab="时间"
,ylab = "上证指数收盘价")
plot(stock$date
,stock$investor_confidence_index
,type="l"
,xlab="时间"
,ylab = "投资者的信心指数")

解决方案三,绘制双坐标图
查看边距
首先我们来说说什么叫边距
margin,其实来源于HTML,在R绘图里面也有边距的说法,我们用图片来说明一下。

这里我们就看到了上左下右的四个边距值

可见,右边的边距太窄了,要绘制双坐标轴,那么就要在右边加上刻度和lyab,由于右边的边距太小,所以我们一般要修改一下边距。不然看不到应有的绘图效果。
修改margin

par(mar = c(5,4,4,4))#mar参数
plot(stock$date
,stock$SH_closing_price
,type='l'
,sub="2020-02-02"
,xlab = "时间"
,ylab = "上证指数收盘价")

现在margin就基本差不多了!
#设置全局参数
par(new=T)#new=T 代表图像是可以覆盖的,也就是你可以在之前
#的图像上面继续绘制图像
plot(stock$date
,stock$investor_confidence_index
,type="l"
,lty = 2
,ann = F
,yaxt='n')#yaxt='n'代表禁止显示y轴刻度线,及这次绘制
#的图像不会在显示y轴的刻度,避免重复
axis(side = 4)#axis可以在4个方向添加轴线 (1:下,2:左,3:上,4:右)
#mtext可以添加文本,side可以指定文本输出到哪个位置,line指定线条样式
mtext(text = "投资者的信心指数"
,side = 4
,line = 3)
#绘制legend图例
legend("topright"
,legend = c("SH收盘价","信心指数")
,lty=c(1,2)
,bty="n"#bty 代表不显示图例的边框)
