R語(yǔ)言數(shù)據(jù)可視化ggplot添加左右y軸繪制天貓雙十一銷售圖
本文是以天貓雙十一銷量與增長(zhǎng)率為例,原始的數(shù)據(jù)可以參考上一篇文章:用 ggplot 重繪天貓雙十一銷售額圖,這里不再作過(guò)多的介紹。
同時(shí)整個(gè)的天貓雙十一的銷售額數(shù)據(jù)分析可以關(guān)注:天貓雙十一“數(shù)據(jù)造假”是真的嗎?
老規(guī)矩,先上最終成果(兩張圖只是顏色的差別):
上圖左邊 y 軸表示增長(zhǎng)率的刻度,右邊 y 軸表示銷售額的數(shù)據(jù),我們將兩者在同一張圖上進(jìn)行展現(xiàn)。其實(shí)將兩個(gè)統(tǒng)計(jì)圖在同一個(gè)坐標(biāo)系中呈現(xiàn)不算是這個(gè)繪圖的難點(diǎn),其真正的難點(diǎn)在與刻度的變換以及坐標(biāo)軸標(biāo)簽的設(shè)定。
下面我們開(kāi)始一步一步來(lái)繪制出上圖所示的圖案~
構(gòu)造數(shù)據(jù)集
構(gòu)造數(shù)據(jù)集前,我們先看看數(shù)據(jù):
年份 | 銷售額 | 增長(zhǎng)率 |
---|---|---|
2009 | 0.5 | — |
2010 | 9.36 | 1772.00 |
2011 | 52 | 455.56 |
2012 | 191 | 267.31 |
2013 | 350 | 83.25 |
2014 | 571 | 63.14 |
2015 | 912 | 59.72 |
2016 | 1207 | 32.35 |
2017 | 1682 | 39.35 |
2018 | 2135 | 26.93 |
2019 | 2684 | 25.71 |
由于銷售額與增長(zhǎng)率都是近乎相同的量綱(單論數(shù)值看,都是在 0-3000 之間),所以我們?cè)谑孪瓤梢圆粚?duì)數(shù)據(jù)進(jìn)行變換,變換為統(tǒng)一的尺度。但我想要在坐標(biāo)軸上,增長(zhǎng)率以百分比的形式顯示,所以需要除以100,但增長(zhǎng)率除以100之后,為了把我們的兩個(gè) y 軸變換到同一個(gè)尺度區(qū)間,所以銷售額也需要隨之除以100。(注意,這里的銷售額除以100 可以不需要具體的實(shí)際意義,只是保證在圖像上呈現(xiàn)效果美觀即可,最后的實(shí)際區(qū)間我們可以通過(guò)修改坐標(biāo)軸的刻度值實(shí)現(xiàn)。)
因此生成數(shù)據(jù)的代碼如下:
year <- 2009:2019 sales <- c(0.5, 9.36, 52, 191, 350, 571, 912, 1207, 1682, 2135, 2684) growth_rate <- c(NA, diff(sales) / sales[1:(length(sales) - 1)] * 100) dat_overview <- data.frame(year = factor(year), sales = sales / 100, growth_rate = growth_rate / 100)
但經(jīng)常使用 ggplot 童鞋可能知道,我們沒(méi)有辦法直接只用上述的數(shù)據(jù)在 ggplot 中進(jìn)行繪制,需要進(jìn)行一個(gè)變換,也就是將銷售額與增長(zhǎng)率并列,并且再加一列變量作為 index,具體操作我們可以使用管道數(shù)據(jù)處理的 package :tidyr
。
具體的原因與使用方法可參見(jiàn):tidyr+ggplot2多個(gè)變量分層展示
library(tidyr) dat_overview %>% gather(sales, growth_rate, key = "var", value = "value")
其結(jié)果如下:
year var value 1 2009 sales 0.0050000 2 2010 sales 0.0936000 3 2011 sales 0.5200000 4 2012 sales 1.9100000 5 2013 sales 3.5000000 6 2014 sales 5.7100000 7 2015 sales 9.1200000 8 2016 sales 12.0700000 9 2017 sales 16.8200000 10 2018 sales 21.3500000 11 2019 sales 26.8400000 12 2009 growth_rate NA 13 2010 growth_rate 17.7200000 14 2011 growth_rate 4.5555556 15 2012 growth_rate 2.6730769 16 2013 growth_rate 0.8324607 17 2014 growth_rate 0.6314286 18 2015 growth_rate 0.5971979 19 2016 growth_rate 0.3234649 20 2017 growth_rate 0.3935377 21 2018 growth_rate 0.2693222 22 2019 growth_rate 0.2571429
繪制散點(diǎn)
首先我們將數(shù)據(jù)框中的散點(diǎn)映射到圖像中:
dat_overview %>% gather(sales, growth_rate, key = "var", value = "value") %>% ggplot(aes(x = year, y = value, col = var)) + geom_point(size = 3, alpha = 0.6)
這里我們使用的是管道數(shù)據(jù)的 ggplot
的繪制方法,所以數(shù)據(jù)集直接使用 %>%
連接即可,不需要寫在 ggplot()
函數(shù)中。
同時(shí)關(guān)于繪圖,上面只是修改了我們散點(diǎn)的尺寸與透明度:size = 3, alpha = 0.6
,得到的繪圖如下面所示。
這時(shí)候的圖還是非常 吃藕 (chou) 的,下面我們?cè)倬窦?xì)琢一些坐標(biāo)的布局與名稱。
修改兩坐標(biāo)軸信息
先直接上代碼:
dat_overview %>% gather(sales, growth_rate, key = "var", value = "value") %>% ggplot(aes(x = year, y = value, col = var)) + geom_point(size = 3, alpha = 0.6) + scale_y_continuous("增長(zhǎng)率", labels = scales::percent, sec.axis = sec_axis(~ . * 100, name = "銷售額 (億元)")) + # scale_color_manual(labels = c("增長(zhǎng)率", "銷售額 (億元)"), values = c("blue", "red")) + scale_color_discrete(labels = c("增長(zhǎng)率", "銷售額 (億元)")) + labs(title = "2009 - 2019 年銷售額與增長(zhǎng)率", x = "年份") + theme(legend.position = "bottom", legend.title = element_blank(), plot.title = element_text(hjust = 0.5))
這里我們新添加了 scale_y_continuous(),這里是修改 y 軸的刻度,首先我們修改了 y 軸左軸的名稱,為增長(zhǎng)率,然后 label = scales::percent 表示將刻度上的數(shù)值以百分比的形式顯示。
最后 sec.axis = sec_axis(~ . * 100, name = "銷售額 (億元)") 則是添加右側(cè) y 軸 (這里叫 scecond axis),刻度為原始刻度乘以100,這里乘以100是由于我們?cè)谏射N售額數(shù)據(jù)的時(shí)候,為了容易尺度范圍,除以了100,同時(shí)添加右側(cè) y 軸的名稱: "銷售額 (億元)"。
scale_color_discrete() 表示將我們的圖例中的名稱進(jìn)行修改:英文改成中文。
也可以使用注釋中的 scale_color_manual() 函數(shù),同時(shí)修改名稱與散點(diǎn)的顏色,這里添加了注釋,需要的童鞋可以取消注釋,同時(shí)將 scale_color_discrete() 打上注釋。
接著我們?cè)傩薷囊恍┲黝}設(shè)置:legend.position = "bottom" 將我們圖例的標(biāo)簽調(diào)整到底部。其它的設(shè)置都是一些常規(guī)操作,可以翻看前面的博文,這里就不進(jìn)行細(xì)說(shuō)了。
最后就能得到我們最終的成果!
以上就是R語(yǔ)言數(shù)據(jù)可視化ggplot添加左右y軸繪制天貓雙十一銷售額的詳細(xì)內(nèi)容,更多關(guān)于ggplot添加左右兩邊y軸的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
R語(yǔ)言統(tǒng)計(jì)結(jié)果輸出至本地文件的幾種方法示例
這篇文章主要給大家介紹了關(guān)于R語(yǔ)言統(tǒng)計(jì)結(jié)果輸出至本地文件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn)
這篇文章主要介紹了R語(yǔ)言ggplot2邊框背景去除的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03R語(yǔ)言多線程運(yùn)算操作(解決R循環(huán)慢的問(wèn)題)
這篇文章主要介紹了R語(yǔ)言多線程運(yùn)算操作(解決R循環(huán)慢的問(wèn)題),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言 實(shí)現(xiàn)將兩張圖放在同一張畫布
這篇文章主要介紹了R語(yǔ)言 實(shí)現(xiàn)將兩張圖放在同一張畫布的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04R語(yǔ)言中c()函數(shù)與paste()函數(shù)的區(qū)別說(shuō)明
這篇文章主要介紹了R語(yǔ)言中c()函數(shù)與paste()函數(shù)的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04大數(shù)據(jù)分析R語(yǔ)言RStudio使用超詳細(xì)教程
RStudio是用于R編程的開(kāi)源工具,這篇文章主要介紹了大數(shù)據(jù)分析R語(yǔ)言RStudio使用教程和一些RStudio的重要技巧,竅門和快捷方式,可快速將您變成RStudio高級(jí)用戶,感興趣的朋友跟隨小編一起看看吧2021-03-03