R-ggplot2-绘图时x轴一种是numeric,一种是dat

作者: TroyShen | 来源:发表于2019-12-23 18:36 被阅读0次

目录

  • 0.问题导入
  • 1.示例数据
  • 2.导入数据
  • 3.解决R起初报错(图1)
  • 4.设置日期及x轴breaks的位置与标注
  • 5.将右侧两列子图x轴时间转化为年份(图2)
  • 6.自定义各子图轴名(图3)
  • 7.总结
  • 8.本文所用软件包(没有需要通过install.packages('')进行安装)
  • 9.致谢

0. 问题导入

日常绘图中,我们可能想着把相关性分析图与两种指标的时间演进图通过facet_wrap绘制到一块。然后,R就开始报错了(如下...R的内心OS其实是:x轴你到底是想要字符类型还是日期类型啊?搞么子啊?要上天吗?)不不不,我只是不想后期进AI。那么应该怎么办呢?今天这篇给出解决方案~

Error in as.Date.numeric(value) : 'origin'一定得给值

1. 示例数据(点击下载示例数据)

相关性分析所需数据
时间序列数据

2. 导入数据

setwd('L:\\JianShu\\20191223')
pl_df_cor = read.csv('pl_df_cor.csv',header = T)
pl_df_line = read.csv('pl_df_line.csv',header = T)

pl_df_cor = pl_df_cor[,-1]
pl_df_line = pl_df_line[,-1]
pl_df_cor = as.data.frame(pl_df_cor)
pl_df_line = as.data.frame(pl_df_line)

pl_df_line$Date = as.Date(pl_df_line$Date)

3. 解决R起初报错(图1)

R起初报错的原因呢就是在于左侧两列与右侧两列x轴的label类型不同。我们在第一步通过将Date 转换为 as.numeric(Date),即numeric类型后,x轴的label类型得以统一,故Bug排除,R不再报错。

但是,图1 是不是看着很别扭。。。好好的时间怎么变成了11800,这是什么鬼?

还有就是,各个子图的横轴,纵轴并都是分别表示的Index与日期,而图1 中只是给出了图统一的横/纵轴名称,这样显然是不妥的!

那么如何解决呢?本篇第4-6节逐一解答

p1 = ggplot()+
  geom_point(data = pl_df_cor,
             aes(x = IndexA, y = value),shape = 1, color = 'blue')+
  geom_line(data = pl_df_line,
            aes(x = as.numeric(Date), y = value, color = variable),size = 1)+
  #scale_x_continuous(breaks = c(seq(-1,1,0.25),as.numeric(date)[date_breaks]),
  #                   labels = c(as.character(seq(-1,1,0.25)),date_labels[date_breaks]))+
  scale_color_manual(values = c('blue','green'))+
  theme_bw()+
  theme(
    axis.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    axis.title = element_text(face = 'bold',color = 'black',size = 14,hjust = 0.5),
    legend.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.title = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.position = 'bottom',
    legend.direction = 'horizontal',
    strip.background = element_blank(),
    strip.placement = 'outside',
    strip.text = element_blank()
  )+
  ylab("Index")+
  xlab("Date")+
  facet_wrap(~type,scales = 'free',nrow = 2)


png('plot1.png',
    height = 20,
    width = 20,
    units = 'cm',
    res = 800)
print(p1)
dev.off()
图1 解决报错后的初始图

4. 设置日期及x轴breaks的位置与标注

date = seq(as.Date('2002-01-01'),as.Date('2003-12-01'),'1 month')
date_breaks = c(seq(1,24,10))
date_labels = as.character(date)

5. 将右侧两列子图x轴时间转化为年份(图2)

p2 = ggplot()+
  geom_point(data = pl_df_cor,
             aes(x = IndexA, y = value),shape = 1, color = 'blue')+
  geom_line(data = pl_df_line,
            aes(x = as.numeric(Date), y = value, color = variable),size = 1)+
  scale_x_continuous(breaks = c(seq(-1,1,0.25),as.numeric(date)[date_breaks]),
                     labels = c(as.character(seq(-1,1,0.25)),date_labels[date_breaks]))+
  scale_color_manual(values = c('blue','green'))+
  theme_bw()+
  theme(
    axis.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    axis.title = element_text(face = 'bold',color = 'black',size = 14,hjust = 0.5),
    legend.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.title = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.position = 'bottom',
    legend.direction = 'horizontal',
    strip.background = element_blank(),
    strip.placement = 'outside',
    strip.text = element_blank()
  )+
  ylab("Index")+
  xlab("Date")+
  facet_wrap(~type,scales = 'free',nrow = 2)


png('plot2.png',
    height = 20,
    width = 20,
    units = 'cm',
    res = 800)
print(p2)
dev.off()
图2 将右侧两列子图x轴时间转化为年份

6. 自定义各子图轴名(图3)

p3 = ggplot()+
  geom_point(data = pl_df_cor,
             aes(x = IndexA, y = value),shape = 1, color = 'blue')+
  geom_line(data = pl_df_line,
            aes(x = as.numeric(Date), y = value, color = variable),size = 1)+
  scale_x_continuous(breaks = c(seq(-1,1,0.25),as.numeric(date)[date_breaks]),
                     labels = c(as.character(seq(-1,1,0.25)),date_labels[date_breaks]))+
  scale_color_manual(values = c('blue','green'))+
  theme_bw()+
  theme(
    axis.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    axis.title = element_text(face = 'bold',color = 'black',size = 14,hjust = 0.5),
    legend.text = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.title = element_text(face = 'bold',color = 'black',size = 12,hjust = 0.5),
    legend.position = 'bottom',
    legend.direction = 'horizontal',
    strip.background = element_blank(),
    strip.placement = 'outside',
    strip.text = element_text(face = 'bold',color = 'black',size = 14,hjust = 0.5)
  )+
  ylab('')+
  xlab('IndexA                                                                      Date')+
  facet_wrap(~type,scales = 'free',nrow = 2,
             strip.position = 'left',
             labeller = as_labeller(
               c("1"="IndexB", "2" = "Indices", "3" = "IndexB", "4"= "Indices")))

png('plot3.png',
    height = 20,
    width = 20,
    units = 'cm',
    res = 800)
print(p3)
dev.off()

图3 自定义各子图轴名

7. 总结

本篇主要解决了以下3个问题:
1. 如何将具有不同类型x/y轴名的子图通过geom_facet 绘制在一起?如连续数字与时间?
2. 如何将转化为numeric类型后的日期以正确形式表示?
3. 如何自定义各子图x/y轴轴名?

8. 本文所用软件包(没有需要通过install.packages('')进行安装)

library('ggplot2')

9. 致谢

首先,感谢大家的持续关注,小编会继续努力,持续更新下去的!

大家如果觉得有用,还麻烦大家转发点赞加关注哈,也可以扩散到朋友圈,多谢大家啦~

大家如果在使用本文代码的过程有遇到问题的,可以留言评论,也可以私信我哈~~


小编联系方式

相关文章

  • R-ggplot2-绘图时x轴一种是numeric,一种是dat

    目录 0.问题导入 1.示例数据 2.导入数据 3.解决R起初报错(图1) 4.设置日期及x轴breaks的位置与...

  • R-20191223~1229本周回顾

    本周共发表了6 篇文章,为了大家方便回顾,特做此期周结: 20191223:R-ggplot2-绘图时x轴一种是n...

  • ggplot2–绘制分布图

    生成绘图数据 直方图和概率密度图 ggplot(dat, aes(x=rating)) + geom_densit...

  • R|绘图函数-学习笔记(四)

    绘图函数 plot(x) 以x的元素值为纵坐标、以序号为横坐标绘图 plot(x, y) x(在x-轴上)与y(在...

  • Echarts 采坑笔记

    标题颜色属性修改 背景颜色的设置 设置grid 绘图位置 修改x轴和y轴的颜色 x轴文字倾斜 设置legend 标...

  • 06-什么是索引绘图

    一、什么是索引绘图? 所谓索引绘图是一种在绘制大网格(mesh)时的一种可以高效绘图的一种方式,普通的绘制三角形需...

  • ggplot2绘图细节总结

    修改x轴绘图顺序 通过设置x轴factor顺序实现: 用forcats包:fct_inorder 按照第一次出现的...

  • 1-1 时间轴的设置

    绘制时间轴 一种可能的技巧的是: 用psbasemap绘制X轴 yogapsxy绘制时间序列曲线。 范例,见实例中...

  • diff()函数---useR!

    diff(x, lag = 1, differences = 1)x是numeric vectorlag是一个整数...

  • OpenGL-坐标系

    笛卡尔坐标系 二维绘图:笛卡尔坐标有一个X轴和一个Y轴组成,X轴为水平方向,Y轴为垂直方向,X和Y相互垂直 三维绘...

网友评论

    本文标题:R-ggplot2-绘图时x轴一种是numeric,一种是dat

    本文链接:https://www.haomeiwen.com/subject/lvftoctx.html