R-ggplot2-繪圖時(shí)x軸一種是numeric嘲恍,一種是date?分面時(shí)老報(bào)錯(cuò)足画?怎么搞?佃牛?

目錄

  • 0.問(wèn)題導(dǎo)入
  • 1.示例數(shù)據(jù)
  • 2.導(dǎo)入數(shù)據(jù)
  • 3.解決R起初報(bào)錯(cuò)(圖1)
  • 4.設(shè)置日期及x軸breaks的位置與標(biāo)注
  • 5.將右側(cè)兩列子圖x軸時(shí)間轉(zhuǎn)化為年份(圖2)
  • 6.自定義各子圖軸名(圖3)
  • 7.總結(jié)
  • 8.本文所用軟件包(沒(méi)有需要通過(guò)install.packages('')進(jìn)行安裝)
  • 9.致謝

0. 問(wèn)題導(dǎo)入

日常繪圖中淹辞,我們可能想著把相關(guān)性分析圖與兩種指標(biāo)的時(shí)間演進(jìn)圖通過(guò)facet_wrap繪制到一塊。然后俘侠,R就開始報(bào)錯(cuò)了(如下...R的內(nèi)心OS其實(shí)是:x軸你到底是想要字符類型還是日期類型跋笞骸?搞么子耙佟央星?要上天嗎?)不不不惫东,我只是不想后期進(jìn)AI莉给。那么應(yīng)該怎么辦呢?今天這篇給出解決方案~

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

1. 示例數(shù)據(jù)(點(diǎn)擊下載示例數(shù)據(jù))

相關(guān)性分析所需數(shù)據(jù)
時(shí)間序列數(shù)據(jù)

2. 導(dǎo)入數(shù)據(jù)

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起初報(bào)錯(cuò)(圖1)

R起初報(bào)錯(cuò)的原因呢就是在于左側(cè)兩列與右側(cè)兩列x軸的label類型不同廉沮。我們?cè)诘谝徊酵ㄟ^(guò)將Date 轉(zhuǎn)換為 as.numeric(Date)颓遏,即numeric類型后,x軸的label類型得以統(tǒng)一滞时,故Bug排除叁幢,R不再報(bào)錯(cuò)。

但是坪稽,圖1 是不是看著很別扭曼玩。鳞骤。。好好的時(shí)間怎么變成了11800演训,這是什么鬼弟孟?

還有就是,各個(gè)子圖的橫軸样悟,縱軸并都是分別表示的Index與日期拂募,而圖1 中只是給出了圖統(tǒng)一的橫/縱軸名稱,這樣顯然是不妥的窟她!

那么如何解決呢陈症?本篇第4-6節(jié)逐一解答

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 解決報(bào)錯(cuò)后的初始圖

4. 設(shè)置日期及x軸breaks的位置與標(biāo)注

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. 將右側(cè)兩列子圖x軸時(shí)間轉(zhuǎn)化為年份(圖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 將右側(cè)兩列子圖x軸時(shí)間轉(zhuǎn)化為年份

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. 總結(jié)

本篇主要解決了以下3個(gè)問(wèn)題:
1. 如何將具有不同類型x/y軸名的子圖通過(guò)geom_facet 繪制在一起?如連續(xù)數(shù)字與時(shí)間震糖?
2. 如何將轉(zhuǎn)化為numeric類型后的日期以正確形式表示录肯?
3. 如何自定義各子圖x/y軸軸名?

8. 本文所用軟件包(沒(méi)有需要通過(guò)install.packages('')進(jìn)行安裝)

library('ggplot2')

9. 致謝

首先吊说,感謝大家的持續(xù)關(guān)注论咏,小編會(huì)繼續(xù)努力,持續(xù)更新下去的颁井!

大家如果覺(jué)得有用厅贪,還麻煩大家轉(zhuǎn)發(fā)點(diǎn)贊加關(guān)注哈,也可以擴(kuò)散到朋友圈雅宾,多謝大家啦~

大家如果在使用本文代碼的過(guò)程有遇到問(wèn)題的养涮,可以留言評(píng)論,也可以私信我哈~~


小編聯(lián)系方式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眉抬,一起剝皮案震驚了整個(gè)濱河市贯吓,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蜀变,老刑警劉巖悄谐,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異库北,居然都是意外死亡爬舰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門贤惯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)洼专,“玉大人棒掠,你說(shuō)我怎么就攤上這事孵构。” “怎么了烟很?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵颈墅,是天一觀的道長(zhǎng)蜡镶。 經(jīng)常有香客問(wèn)我,道長(zhǎng)恤筛,這世上最難降的妖魔是什么官还? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮毒坛,結(jié)果婚禮上望伦,老公的妹妹穿的比我還像新娘。我一直安慰自己煎殷,他們只是感情好屯伞,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著豪直,像睡著了一般劣摇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弓乙,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天末融,我揣著相機(jī)與錄音,去河邊找鬼暇韧。 笑死勾习,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的锨咙。 我是一名探鬼主播语卤,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼酪刀!你這毒婦竟也來(lái)了储狭?” 一聲冷哼從身側(cè)響起赤拒,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后谜诫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡兰迫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年淀零,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荧库。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡堰塌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出分衫,到底是詐尸還是另有隱情场刑,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布蚪战,位于F島的核電站牵现,受9級(jí)特大地震影響铐懊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜瞎疼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一科乎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贼急,春花似錦茅茂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至腻异,卻和暖如春进副,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悔常。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工影斑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人机打。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓矫户,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親残邀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子皆辽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349