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并没有绘制上去

image.png

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


image.png

原因就是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)
image.png

图现在倒是绘制上去了,但是聪明的你马上就发现问题

      #产生的问题,本身信心指数是有波动的
      #收盘价也是有波动的,经过放大比例尺,导致原先有波动的数据,也看不出来
      #失去了数据的原有价值,容易给别人造成歧义

解决方案二,绘制子图,但是你又会发现问题:对比性不强


        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 = "投资者的信心指数")
image.png

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


image.png

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


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

修改margin

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

现在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 代表不显示图例的边框)
image.png

好啦,今天就到这里,可以说讲的很仔细了,大家慢慢悟吧,希望能帮助到爱学习的你们!如果可以,我很开心!如果想深入学习R,欢迎访问我的主页R专栏!

上一篇下一篇

猜你喜欢

热点阅读