ggplot2學(xué)習(xí)(五)

ggplot2基礎(chǔ)(5)——配色與圖例

參考《R數(shù)據(jù)可視化手冊》、《R繪圖:一文了解ggplot2顏色的設(shè)置》记舆、《ggplot2圖例設(shè)置》逗余、《Continuous colour bar guide》、《ggplot2學(xué)習(xí)筆記——圖例系統(tǒng)及其調(diào)整函數(shù)

在ggplot2中顏色是一個圖形屬性(aesthetic)影钉。一般而言我們會將數(shù)據(jù)中的某個屬性映射為顏色画髓,以便于在幫助讀者來理解圖片的內(nèi)容,而在R中平委,變量可以分為以下幾種:

  • 連續(xù)變量
  • 離散變量

其中離散變量又可以分為

  • 有序的分類變量
  • 無序的分類變量

對于不同類型的變量奈虾,我們可以使用不同的方法進行映射

查看R中的顏色名稱可以使用colors()函數(shù)

1 顏色

1.1連續(xù)型變量的映射函數(shù)

填充色函數(shù)

填充色函數(shù)包括

  • scale_fill_gradient() 兩色漸變
  • scale_fill_gradient2() 三色漸變
  • scale_fill_gradientn() 等間隔的n種顏色的漸變色
  • scale_fill_viridis_c() viridis調(diào)色板

輪廓色函數(shù)

輪廓色函數(shù)包括:

  • scale_colour_gradient() 兩色漸變
  • scale_colour_gradient2() 三色漸變
  • scale_colour_gradientn() 等間隔的n種顏色的漸變色
  • scale_colour_viridis_c() viridis調(diào)色板

在使用兩色漸變的時候,需要指定參數(shù)lowhigh
在使用三色漸變的時候肉微,還需要指定參數(shù)mid匾鸥;
使用間隔n中間色漸變的時候,需要指定colous浪册;

viridis調(diào)色板是對色盲友好的調(diào)色板扫腺,ggplot2(3.0.0)附帶了該調(diào)色板

library(ggplot2)
library(scales)
library(cowplot)


p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp)) + 
    geom_point(size=3)

p1 <- p + scale_colour_gradient(low="black", high="white")

p2 <- p + scale_colour_gradient2(low=muted("red"), mid="white", high=muted("blue"), midpoint=10)

p3 <- p + scale_colour_gradientn(colours=c("darkred", "orange", "yellow", "white"))

p4 <- p + scale_colour_viridis_c()

plot_grid(p, p1, p2, p3, p4)
image.png

1.2 離散型變量的映射函數(shù)

填充色函數(shù)

  • scale_fill_discrete()/scale_fill_hue 色輪周圍均勻等距色
  • scale_fill_grey() 灰度調(diào)色板
  • scale_fill_viridis_d() viridis調(diào)色板
  • scale_fill_brewer() ColorBrewer調(diào)色板
  • scale_fill_manual() 自定義顏色

輪廓色函數(shù)

  • scale_colour_discrete()/scale_colour_hue 色輪周圍均勻等距色
  • scale_colour_grey() 灰度調(diào)色板
  • scale_colour_viridis_d() viridis調(diào)色板
  • scale_colour_brewer() ColorBrewer調(diào)色板
  • scale_colour_manual() 自定義顏色

先看幾個簡單的例子:

library(ggplot2)
library(scales)
library(cowplot)


p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=factor(cyl))) + 
    geom_point(size=3)

p1 <- p + scale_colour_viridis_d()

p2 <- p + scale_colour_hue(l=45)

p3 <- p + scale_colour_brewer(palette = "Oranges")

p4 <- p + scale_colour_grey()

plot_grid(p, p1, p2, p3, p4)
image.png

最后重點說一下自定義調(diào)色板,在使用自定義調(diào)色板的時候村象,需要指定參數(shù)values笆环,需要注意的是values參數(shù)在指定過程中,其顏色的數(shù)量需要與離散變量的數(shù)量相一致厚者,不過不想使用默認的顏色順序躁劣,也可在values中指定库菲。

library(viridis)

p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=factor(cyl))) + 
    geom_point(size=3)

p1 <- p + scale_colour_manual(values=c("red", "blue", "yellow"))

p2 <- p + scale_colour_manual(values=c("6"="red", "8"="blue", "4"="yellow"))

p3 <- p + scale_colour_manual(values=viridis(3))

plot_grid(p, p1, p2, p3)
image.png

2 圖例

對于圖例的操作,主要涉及三類函數(shù)鳖擒,分別是:

  • guides()
  • theme()
  • scale_fill_****()scale_colour_****()

2.1 guide()

guides()函數(shù)的定義為:

guides(
    colour/fill = guide_colorbar()/guide_legend(),
    size = guide_legend(),
    shape = guide_legend(),
    linetype = guide_legend(),
    alpha = guide_legend()
)

其中guide_colorbar()主要用于處理連續(xù)型變量,guide_legend()用于處理離散型變量蒋荚。

guide_colorbar()函數(shù)的定義為:


guide_colorbar(
    title = waiver(),
    title.position = NULL,
    title.theme = NULL,
    title.hjust = NULL,
    title.vjust = NULL,
    label = TRUE,
    label.position = NULL,
    label.theme = NULL,
    label.hjust = NULL,
    label.vjust = NULL,
    barwidth = NULL,
    barheight = NULL,
    nbin = 300,
    raster = TRUE,
    frame.colour = NULL,
    frame.linewidth = 0.5,
    frame.linetype = 1,
    ticks = TRUE,
    ticks.colour = "white",
    ticks.linewidth = 0.5,
    draw.ulim = TRUE,
    draw.llim = TRUE,
    direction = NULL,
    default.unit = "line",
    reverse = FALSE,
    order = 0,
    available_aes = c("colour","color", "fill")
    ...
)

在此只介紹一些比較重要的參數(shù):

  • title 圖例的標(biāo)題
  • title.position 圖例的位置
  • title.theme 通過element_text()函數(shù)設(shè)置圖例標(biāo)題文字的大小馆蠕、字體期升、顏色、傾斜角度等樣式
  • label 是否顯示圖例
  • label.position 圖例標(biāo)簽的位置
  • label.theme 通過element_text()函數(shù)設(shè)置圖例標(biāo)簽文字的大小互躬、字體播赁、顏色、傾斜角度等樣式
  • barwidthbarheight 使用unit()函數(shù)設(shè)置圖例的寬度和高度
  • ticks 色條上的刻度是否可見
  • draw.ulimdraw.llim 上下刻度線是否可見
  • direction 圖例水平放置還是垂直放置吼渡,可以設(shè)置為"horizontal"或"vertical"
  • reverse 圖例刻度的順序是否顛倒
  • order 多類圖例時容为,圖例的排序

guide_legend()函數(shù)的定義為:

guide_legend(
    title = waiver(), 
    title.position = NULL, 
    title.theme = NULL, 
    title.hjust = NULL, 
    title.vjust = NULL, 
    label = TRUE, 
    label.position = NULL, 
    label.theme = NULL, 
    label.hjust = NULL, 
    label.vjust = NULL, 
    keywidth = NULL, 
    keyheight = NULL, 
    direction = NULL, 
    default.unit = "line", 
    override.aes = list(), 
    nrow = NULL, 
    ncol = NULL, 
    byrow = FALSE, 
    reverse = FALSE, 
    order = 0, 
    ...
) 

其中絕大多數(shù)參數(shù)與guide_colorbar相一致,差別在于:

  • key.width/key.height/key.size 用于控制圖例中小矩形塊(key)的寬寺酪、高舟奠、大小
library(ggplot2)
library(scales)
library(cowplot)


p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp, shape=factor(cyl))) + 
    geom_point(size=3)
    

p1 <- p +
    guides(
        color = guide_colorbar(
            title = "Legend 1",
            ticks = FALSE,
            label.position='left',
            order = 2,
        ),
        shape = guide_legend(
            title = "Legend 2",
            label.position='top',
            order = 1,
        )
    )

p2 <- p +
    guides(
        color = guide_colorbar(
            title = "Legend 1",
            ticks = FALSE,
            label.position='left',
            reverse = TRUE,
            order = 1,
        ),
        shape = guide_legend(
            title = "Legend 2",
            label.position='top',
            order = 2
        )
    )

plot_grid(p, p1, p2)
image.png

2.2 theme()

在主題中,也能夠?qū)D例進行一定的設(shè)置房维,其參數(shù)為以legend開頭的一些參數(shù),包括:

  • legend.background 圖例的背景色抬纸,使用element_rect()進行設(shè)置
  • legend.margin 圖例的邊界
  • legend.spacing 圖例間的空距咙俩,使用unit()進行設(shè)置
  • legend.spacing.x
  • legend.spacing.y
  • legend.key 圖例符號
  • legend.key.size 圖例符號的大小
  • legend.text 圖例文本標(biāo)簽
  • legend.text.align 圖例文本標(biāo)簽的對齊方式(0為左對齊,1為右對齊)
  • legend.title 圖例標(biāo)題,使用element_text()進行設(shè)置
  • legend.title.align 圖例標(biāo)題的對齊方式
  • legend.position 圖例位置("none", "top", "bottom", "left", "right")
  • legend.direction 圖例水平放置還是垂直放置阿趁,可以設(shè)置為"horizontal"或"vertical"
  • legend.justification 圖例居中的方式
  • legend.box 多圖例的排列方式膜蛔,可以設(shè)置為"horizontal"或"vertical"
  • legend.box.just 多圖例的居中方式
  • legend.box.margin
  • legend.box.background
  • legend.box.spacing

其中需要說明的是:

  • legend.position除了可以設(shè)置為"none", "top", "bottom", "left", "right"外,還可以設(shè)置為c(x, y)的形式脖阵,x/y的取值范圍為(0,1)皂股,其中圖片的左下角為(0, 0),右上角為(1, 1)命黔;而legend.justification用來設(shè)定圖例的那個點放置到legend.position所指定的坐標(biāo)上(默認為(0.5, 0.5))
library(ggplot2)
library(scales)
library(cowplot)


p <- ggplot(mtcars, aes(x = wt, y = mpg, colour=disp, shape=factor(cyl))) + 
    geom_point(size=3)

p1 <- p + theme(
        legend.position = c(1,0), 
        legend.justification=c(1,0),
        
    )

p2 <- p1 + theme(
    legend.background = element_blank(),
    legend.key = element_blank(),
    legend.title = element_text(
        face = "italic",
        color = "red",
        size = 14,
    )
)

plot_grid(p, p1, p2)
image.png

2.3 scale_fill_****()和scale_colour_****()

這兩個函數(shù)在顏色部分已經(jīng)做了比較細致的介紹了呜呐,在此只介紹一些和圖例相關(guān)的設(shè)置

  • labs 圖例的標(biāo)簽名稱
  • limits 可以用于設(shè)置類別的順序
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者悍募。
  • 序言:七十年代末蘑辑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子坠宴,更是在濱河造成了極大的恐慌洋魂,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喜鼓,死亡現(xiàn)場離奇詭異副砍,居然都是意外死亡,警方通過查閱死者的電腦和手機庄岖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門豁翎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谨垃,“玉大人硼控,你說我怎么就攤上這事〕赘簦” “怎么了纷责?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵再膳,是天一觀的道長曲横。 經(jīng)常有香客問我,道長灾杰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任麦备,我火速辦了婚禮凛篙,結(jié)果婚禮上鞋诗,老公的妹妹穿的比我還像新娘迈嘹。我一直安慰自己,他們只是感情好融痛,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布雁刷。 她就那樣靜靜地躺著沛励,像睡著了一般炮障。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上企蹭,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天谅摄,我揣著相機與錄音系馆,去河邊找鬼。 笑死螺男,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播谓媒,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼句惯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了拷淘?” 一聲冷哼從身側(cè)響起启涯,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤结洼,失蹤者是張志新(化名)和其女友劉穎叉跛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體筷厘,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡酥艳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年玖雁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赫冬。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡膛薛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哄啄,到底是詐尸還是另有隱情,我是刑警寧澤咨跌,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布锌半,位于F島的核電站,受9級特大地震影響殉摔,放射性物質(zhì)發(fā)生泄漏记焊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一碗硬、第九天 我趴在偏房一處隱蔽的房頂上張望肛响。 院中可真熱鬧,春花似錦特笋、人聲如沸猎物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至窒朋,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間榔至,已是汗流浹背唧取。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留枫弟,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像袜漩,于是被迫代替她去往敵國和親宙攻。 傳聞我的和親對象是個殘疾皇子介褥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

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