[R語言] TidyTuesday ggplot2可視化學(xué)習(xí) 3 (Rap Artists)

數(shù)據(jù)主題:Rap Artists

數(shù)據(jù)源:
https://github.com/gkaramanis/tidytuesday/tree/master/2020-week16/data

依然是第十六周的主題:

前置知識(shí)

- futurevisions包

https://github.com/JoeyStanley/futurevisions

devtools::install_github("JoeyStanley/futurevisions")

基于NASA航天局visions-of-the-future的調(diào)色包

個(gè)人感覺用色鮮明田晚,飽和度高,還挺好看的

# 兩個(gè)核心函數(shù)
futurevisions("mars")
# [1] "#DB3A2F" "#EAB33A" "#275D8E" "#902A57" "#F7EBD3" "#0B0C0B"
show_palette("mars")

ggplot(mpg, aes(cty, hwy, color = factor(cyl))) +
  geom_jitter() +
  scale_color_manual(values = futurevisions("mars"))

梯度顏色5類纵顾,離散顏色4類屡江,分類顏色11類

- rev函數(shù)

逆轉(zhuǎn)向量順序

x <- c(1,2,3)
rev(x)
# [1] 3 2 1
# 等同于
x[length(x):1]

futurevisions("cancri")[1:5]
# [1] "#343854" "#8C384D" "#CF2438" "#D95E31" "#F0C742"
rev(futurevisions("cancri")[1:5])
# [1] "#F0C742" "#D95E31" "#CF2438" "#8C384D" "#343854"

- 關(guān)于內(nèi)置主題

參考:
https://dataxujing.github.io/ggplot2%E7%9A%84%E4%B8%BB%E9%A2%98%E6%A8%A1%E6%9D%BF/

# ggplot2內(nèi)置主題主要包括
theme_gray() # 默認(rèn)
theme_bw()
theme_linedraw()
theme_light()
theme_dark()
theme_minimal()
theme_classic()
theme_void()

library(ggplot2)
library(gridExtra)
p <- ggplot(mtcars) + geom_point(aes(x = wt, y = mpg))

grid.arrange(p + theme_gray() + ggtitle("theme_gray"),
             p + theme_bw() + ggtitle("theme_bw"),
             p + theme_linedraw() + ggtitle("theme_linedraw"), 
             p + theme_light() + ggtitle("theme_light"),
             p + theme_dark() + ggtitle("theme_dark"), 
             p + theme_minimal() + ggtitle("theme_minimal"),
             p + theme_classic() + ggtitle("theme_classic"),
             p + theme_void() + ggtitle("theme_void"),ncol=2)

本例用的是theme_void喇喉,基本只保留數(shù)據(jù)圖本身(點(diǎn) 線 條)

原圖復(fù)現(xiàn)

- 導(dǎo)入包和數(shù)據(jù)

library(tidyverse)
library(magrittr)
library(janitor)
library(ggimage)
# remotes::install_github("wilkelab/ggtext")
# https://github.com/wilkelab/ggtext
library(ggtext)
# devtools::install_github("JoeyStanley/futurevisions")
library(futurevisions)

windowsFonts(HEL=windowsFont("Helvetica CE 55 Roman"),
             RMN=windowsFont("Times New Roman"),
             ARL=windowsFont("Arial"),
             ARLB=windowsFont("Arial Bold"),
             JBM=windowsFont("JetBrains Mono"))

# 使用rio包對(duì)于文件編碼的處理不智能 
?rio::import
rankings <- readr::read_csv('https://raw.githubusercontent.com/gkaramanis/tidytuesday/master/2020-week16/data/data-kOlSQ.csv') 

- 數(shù)據(jù)處理

# 新學(xué)的操作,不過其實(shí)Hadley大佬不建議用%<>% 
rankings %<>% 
  # 可以將重復(fù)列區(qū)分開
  janitor::clean_names() %>% 
  # 選擇列的時(shí)候可以直接rename
  select(title_artist = song_artist, img = spotify_thumb_sm, 3:15) %>% 
  filter(n > 4) %>% 
  mutate(
    rank = row_number(),
    title_artist = str_remove(title_artist, "!\\[\\].+"),
    title_artist = str_replace(title_artist, "\\*\\* ", "\\*\\*"),
    img = ifelse(str_detect(img, "data"), NA, img),
    img = ifelse(str_detect(title, "Shook"), "https://i.scdn.co/image/ab67616d00004851a2203fa0656cede30f879b97", img), # fix image for this track
    # 因子重排序默認(rèn)降序
    title = fct_reorder(title, critic_rating),  
    n_1 = n1,
    n_2_5 = n2 + n3 + n4 + n5
  ) %>% 
  pivot_longer(cols = n1:n4, names_to = "votes", values_to = "votes_n")

- 畫圖

p_img <- ggplot(rankings) +
  geom_bar(data = subset(rankings, votes == "n1"), 
           aes(votes_n, title,fill = votes), 
           # 決定柱形圖方向
           orientation = "y", 
           # position = "stack", # 柱形縱向堆疊,dodge是橫向并列
           # 本質(zhì)下一行代碼一樣痘括,實(shí)際上這里不需要寫
           position = position_stack(reverse = FALSE),
           stat = "identity", 
           width = 0.8) +
  geom_bar(data = subset(rankings, votes != "n1"), 
           aes(-votes_n, title, fill = votes), 
           orientation = "y", 
           position = position_stack(reverse = TRUE), 
           stat = "identity", 
           width = 0.8) +
  # n_1 + 1.5 明確了圖片和右側(cè)柱形的相對(duì)映射位置
  # image通過url將圖片載入圖層
  # asp是橫縱比
  geom_image(aes(n_1 + 1.5, title, image = img), size = 0.029, asp = 1.375)

p <- p_img +
  geom_richtext(aes(n_1 + 2.5, title, label = title_artist), 
                size = 7, family = "ARL", 
                hjust = 0, vjust = 0.5, fill = NA, label.color = NA, lineheight = 1.1) +
  annotate("text",  x = 35, y = 13, 
           label = "BBC Music’s\ngreatest hip-hop\nsongs of all time", 
           hjust = 1, vjust = 0, colour = "black", family = "JBMB", size = 18, lineheight = 1) +
  annotate("text",  x = 35, y = 10.9, 
           label = "Distribution of critics' votes\nfor songs with 5 votes or more", 
           hjust = 1, vjust = 0, colour = "black", family = "ARL", size = 12, lineheight = 1) +
  # 添加中白線歇竟,美化
  geom_vline(xintercept = 0, color = "white") +
  # 控制x軸范圍
  scale_x_continuous(limits = c(-12, 35)) +
  
  scale_fill_manual(values = rev(futurevisions("cancri")[1:5]), 
                    labels = c("1st fav.", "2nd fav.", "3rd fav.", "4th fav.", "5th fav."), 
                    guide = guide_legend(direction = "horizontal", 
                                         title = "", 
                                         title.position = "top", 
                                         title.hjust = 0.5, 
                                         label.position = "bottom")) +
  labs(
    caption = "Source: BBC Music/Datawrapper | Graphic: Georgios Karamanis"
  ) +
  theme_void() +
  theme(
    legend.position = c(0.815, 0.45),
    legend.spacing.x = unit(0, "pt"),
    legend.key.width = unit(90, "pt"),
    legend.text = element_text(family = "IBM Plex Sans Bold", size = 10),
    # legend.title = element_text(family = "IBM Plex Serif Bold", size = 15),
    # 填充畫面背景色
    plot.background = element_rect(fill = "#a7a6ba", colour = NA),
    plot.caption = element_text(family = "IBM Plex Sans", size = 12, hjust = 0.96),
    # 調(diào)節(jié)畫面邊緣間距挥唠,很實(shí)用
    plot.margin = margin(20, 20, 20, 20)
  ) +
  ggsave(here::here(".",paste0("rap-artists-likert-", format(Sys.time(), "%Y%m%d"), ".png")), 
         dpi = 320, width = 22, height = 16)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市焕议,隨后出現(xiàn)的幾起案子宝磨,更是在濱河造成了極大的恐慌,老刑警劉巖盅安,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唤锉,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡别瞭,警方通過查閱死者的電腦和手機(jī)窿祥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蝙寨,“玉大人晒衩,你說我怎么就攤上這事∏酵幔” “怎么了听系?”我有些...
    開封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)虹菲。 經(jīng)常有香客問我靠胜,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任浪漠,我火速辦了婚禮菠赚,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘郑藏。我一直安慰自己衡查,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開白布必盖。 她就那樣靜靜地躺著拌牲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪歌粥。 梳的紋絲不亂的頭發(fā)上塌忽,一...
    開封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音失驶,去河邊找鬼土居。 笑死,一個(gè)胖子當(dāng)著我的面吹牛嬉探,可吹牛的內(nèi)容都是我干的擦耀。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼涩堤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼眷蜓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胎围,我...
    開封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤吁系,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后白魂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體汽纤,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年福荸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蕴坪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逞姿,死狀恐怖辞嗡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情滞造,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布栋烤,位于F島的核電站谒养,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜买窟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一丰泊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧始绍,春花似錦瞳购、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至吞杭,卻和暖如春盏浇,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芽狗。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來泰國打工绢掰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人童擎。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓滴劲,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親顾复。 傳聞我的和親對(duì)象是個(gè)殘疾皇子哑芹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容