久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

ggplot2筆記6:標(biāo)度,、軸和圖例

 萌小芊 2018-05-21


Scales, Axes and Legends

6.1 簡介

標(biāo)度(scale)是將數(shù)據(jù)的取值映射到圖形空間,例如顏色,、大小和形狀表示不同的數(shù)值,。展現(xiàn)標(biāo)度的常見做法是繪制圖例和坐標(biāo)軸。

每一種標(biāo)度都是從數(shù)據(jù)空間的某個區(qū)域(標(biāo)度的定義域)到圖層屬性空間的某個值域(標(biāo)度的值域)的一個函數(shù),。標(biāo)度的定義域提供給這個標(biāo)度的變量的取值范圍,。

定義域(變量)可以是連續(xù)型、離散型,、有序或者無序型,。值域則包括我們可以感知的圖形屬性(顏色、形狀,、大小,、線條等等)

執(zhí)行標(biāo)度的過程分為

  1. 變換

  2. 訓(xùn)練

  3. 映射

標(biāo)度可以粗略地分為四個類別:

  1. 位置標(biāo)度

  2. 顏色標(biāo)度

  3. 手動離散型標(biāo)度

  4. 同一型標(biāo)度

6.2 修改標(biāo)度

實際上每個圖片生成的命令都有默認(rèn)的標(biāo)度,比如這個簡單的代碼:

  1. ggplot(mpg, aes(displ, hwy)) +

  2. geom_point(aes(colour = class))

實際上它背后的標(biāo)度是這樣的:

  1. ggplot(mpg, aes(displ, hwy)) +

  2.  geom_point(aes(colour = class)) +

  3.  scale_x_continuous() +

  4.  scale_y_continuous() +

  5.  scale_colour_discrete()

如果你想修改x軸y軸的名字:

  1. ggplot(mpg, aes(displ, hwy)) +

  2.  geom_point(aes(colour = class)) +

  3.  scale_x_continuous('A really awesome x axis ') +

  4.  scale_y_continuous('An amazingly great y axis ')

如果你想修改顏色:

  1. ggplot(mpg, aes(displ, hwy)) +

  2.  geom_point(aes(colour = class)) +

  3.  scale_x_sqrt() +

  4.  scale_colour_brewer()

從上面幾個例子可以看出來,, scale的“命名方案”是在后面添加下劃線 _,,然后添加要修改的相應(yīng)對象和屬性,下表有一個簡單的總結(jié)

(截圖來自《ggplot2(第一版)》)

6.3 引導(dǎo)元素:圖例和坐標(biāo)軸

(Guide:Legends and Axes)

什么是引導(dǎo)元素(guide)

引導(dǎo)元素:生成一個允許讀圖者從圖形屬性空間到數(shù)據(jù)空間進(jìn)行反向映射的引導(dǎo)元素,,從而從圖中讀取數(shù)值

  • 對于位置型圖形,,引導(dǎo)元素是坐標(biāo)軸(Axis)


  • 對于其他圖形,引導(dǎo)元素主要是圖例(Legend)


6.3.1 標(biāo)度名稱

下面我們創(chuàng)建一個簡單的數(shù)據(jù)框

  1. df <> data.frame(x = 1:2, y = 1, z = 'a')

兩種修改橫坐標(biāo)名稱的代碼,,首先是簡單的命名為 'X axis'

  1. p <> ggplot(df, aes(x, y)) + geom_point()

  2. p + scale_x_continuous('X axis')

另外一種使用了 quote()

  1. p + scale_x_continuous(quote(a + mathematical ? expression))  

  2. ## `^`后面的字符轉(zhuǎn)換為上標(biāo)形式

當(dāng)修改坐標(biāo)軸名稱,、圖例名稱時,有一個相對簡單的方法,,就是使用 xlab(),, ylab()labs()三種函數(shù):

例如

xlab(),, ylab()可以用來更改x軸和y軸的名稱:

  1. df <> data.frame(x = 1:2, y = 1, z = 'a')

  2. p <> ggplot(df, aes(x, y)) + geom_point(aes(colour = z))

  3. p + xlab('X axis') + ylab('Y axis')

如果要將圖例名稱也更改,,就直接用 labs()

  1. p <> ggplot(df, aes(x, y)) + geom_point(aes(colour = z))

  2. p + labs(x = 'X axis', y = 'Y axis', colour = 'Colour\nlegend')

  3. ## 用'\n'換行

如果想去掉坐標(biāo)軸名稱:

  1. p + labs(x = '', y = '')

  2. p + labs(x = NULL, y = NULL)

6.3.2 位置標(biāo)度和標(biāo)簽(Breaks and Labels)

breaks控制坐標(biāo)軸上刻度線的單位間隔。每個 breaks都有一個對應(yīng)的標(biāo)簽 labels,。

下面從幾個例子中說明:

  1. 創(chuàng)建一個數(shù)據(jù)集,,我們來更改x軸單位時間間隔:

  1. df <> data.frame(x = c(1, 3, 5) * 1000, y = 1)

  2. axs <> ggplot(df, aes(x, y)) +

  3.  geom_point() +

  4.  labs(x = NULL, y = NULL)

  5. ## 不更改設(shè)置

  6. axs

  7. ## 添加breaks,,設(shè)置x軸單位間隔

  8. axs + scale_x_continuous(breaks = c(2000, 4000))

  9. ## 添加labels

  10. axs + scale_x_continuous(breaks = c(2000, 4000), labels = c('2k', '4k'))

  1. 下面的例子標(biāo)度是除x軸和y軸之外的顏色:

  1. df <> data.frame(x = c(1, 3, 5) * 1000, y = 1)

  2. leg <> ggplot(df, aes(y, x, fill = x)) +

  3.  geom_tile() +

  4.  labs(x = NULL, y  = NULL)

  5. ## 不更改設(shè)置

  6. leg

  7. ## 添加breaks修改標(biāo)度

  8. leg + scale_fill_continuous(breaks = c(2000, 4000))

  9. ## 添加labels修改標(biāo)度

  10. leg + scale_fill_continuous(breaks = c(2000, 4000), labels = c('2k', '4k'))

  1. 修改離散型分類標(biāo)簽

在這個例子中,我們想更改y軸上各個點(diǎn)的標(biāo)簽:

  1. df2 <> data.frame(x = 1:3, y = c('a', 'b', 'c'))

  2. ggplot(df2, aes(x, y)) +

  3.  geom_point()

  4. ggplot(df2, aes(x, y)) +

  5.  geom_point() +

  6.  scale_y_discrete(labels = c(a = 'apple', b = 'banana', c = 'carrot'))

  1. 去掉x軸的間隔和去掉標(biāo)簽名稱

  1. axs + scale_x_continuous(breaks = NULL)

  1. axs + scale_x_continuous(labels = NULL)

  1. 去掉填充色框和去掉色框的顏色標(biāo)度

  1. leg + scale_fill_continuous(breaks = NULL)

  2. leg + scale_fill_continuous(labels = NULL)

6.4 圖例

和坐標(biāo)軸相比,,圖例(Legends)的變化更加多樣

6.4.1 圖層和圖例的結(jié)合

圖例可以有多個圖層,。

show.legend參數(shù)是設(shè)置是否顯示在圖例中,在默認(rèn)狀態(tài)下,,設(shè)定值是為 FALSE,,意思是不顯示;

如下例:

  1. df <> data.frame(x = 1, y = c(1,2,3), z = c('a', 'b', 'c'))

  2. ggplot(df, aes(y, y)) +

  3.  geom_point(size = 4, colour = 'grey20') +

  4.  geom_point(aes(colour = z), size = 2)

當(dāng) show.legend=TRUE,,就是這個圖層也顯示在圖例中:

  1. ggplot(df, aes(y, y)) +

  2.  geom_point(size = 4, colour = 'grey20', show.legend = TRUE) +

  3.  geom_point(aes(colour = z), size = 2)

當(dāng)你設(shè)置透明度來處理重疊繪圖時,,你可能希望圖例和圖中圖形對象的不完全一樣,比如:

  1. ## 創(chuàng)建數(shù)據(jù)框,,產(chǎn)生1000個服從正態(tài)分布的隨機(jī)數(shù)

  2. norm <> data.frame(x = rnorm(1000), y = rnorm(1000))  

  3. ## 設(shè)置z,,整個數(shù)據(jù)框取子集分成三個部分

  4. norm$z <> cut(norm$x, 3, labels = c('a', 'b', 'c'))

  5. ## 只在函數(shù)中設(shè)置透明度參數(shù),圖例透明度默認(rèn)為0.1

  6. ggplot(norm, aes(x, y)) +

  7.  geom_point(aes(colour = z), alpha = 0.1)

使用 guides()函數(shù),,設(shè)置 guide_legend()中的覆蓋映射 override.aes

  1. ## list中透明度是1

  2. ggplot(norm, aes(x, y)) +

  3.  geom_point(aes(colour = z), alpha = 0.1) +

  4.  guides(colour = guide_legend(override.aes = list(alpha = 1)))

除此之外,,我們還可以設(shè)置,散點(diǎn)中點(diǎn)的形狀:

  1. ggplot(df, aes(x, y)) + geom_point(aes(colour = z))

  2. ggplot(df, aes(x, y)) + geom_point(aes(shape = z))

  3. ggplot(df, aes(x, y)) + geom_point(aes(shape = z, colour = z))

6.4.2 圖例的位置

這部分講的是把圖例放哪兒

決定放哪兒的參數(shù)是: theme()中的 legend.position

默認(rèn)狀態(tài)是 theme(legend.position='right')

然后我們可以通過“right”, “l(fā)eft”, “top”, “bottom”,,把他放在上/下/左,,或者去掉“none”,例如:

  1. df <> data.frame(x = 1:3, y = 1:3, z = c('a', 'b', 'c'))

  2. base <> ggplot(df, aes(x, y)) +

  3.  geom_point(aes(colour = z), size = 3) +

  4.  xlab(NULL) +

  5.  ylab(NULL)

  6. base + theme(legend.position = 'right') # the default

  7. base + theme(legend.position = 'bottom')

  8. base + theme(legend.position = 'none')

此外,,可以通過設(shè)置坐標(biāo)點(diǎn),,指定圖例的位置:

  1. df <> data.frame(x = 1:3, y = 1:3, z = c('a', 'b', 'c'))

  2. base <> ggplot(df, aes(x, y)) +

  3.  geom_point(aes(colour = z), size = 3)

  4. base + theme(legend.position = c(0, 1), legend.justification = c(0, 1))

6.4.3 Guide函數(shù)

guide是引導(dǎo)元素。

guide()函數(shù)可以提供很多額外的功能,,比如 guide_colourbar()(用于連續(xù)型變量),; guide_legend()(連續(xù)型或離散型變量均可)

用法如下例:

  1. df <> data.frame(x = 1, y = 1:3, z = 1:3)

  2. base <> ggplot(df, aes(x, y)) + geom_raster(aes(fill = z))

  3. base

下面對圖例部分的顏色填充加以設(shè)置:

  1. base + scale_fill_continuous(guide = guide_legend())

換成 guide()函數(shù)的寫法,效果是一樣的:

  1. base + guides(fill = guide_legend())

這些函數(shù)可以調(diào)整圖例中的各種細(xì)節(jié),。

  • guide_legend()

可以通過 ncol,, byrow調(diào)整圖例的各種排列

  1. df <> data.frame(x = 1, y = 1:4, z = letters[1:4])

  2. # Base plot

  3. p <> ggplot(df, aes(x, y)) + geom_raster(aes(fill = z))

  4. p

  5. p + guides(fill = guide_legend(ncol = 2))

  6. p + guides(fill = guide_legend(ncol = 2, byrow = TRUE))

可以通過 reverse調(diào)整圖例方向

  1. df <> data.frame(x = 1, y = 1:4, z = letters[1:4])

  2. p <> ggplot(df, aes(1, y)) + geom_bar(stat = 'identity', aes(fill = z))

  3. p

  4. p + guides(fill = guide_legend(reverse = TRUE))

還有上文提過的 override.aes改變圖例圖形屬性

  • guide_colourbar()

這個參數(shù)只能設(shè)定連續(xù)型變量。

只能設(shè)置成顏色漸變型的條形圖例,。

舉個栗子就明白了:

  1. df <> data.frame(x = 1, y = 1:4, z = 4:1)

  2. p <> ggplot(df, aes(x, y)) + geom_tile(aes(fill = z))

  3. p

  4. p + guides(fill = guide_colorbar(reverse = TRUE))

  5. p + guides(fill = guide_colorbar(barheight = unit(4, 'cm')))

6.5 限制范圍(limits)

圖表上坐標(biāo)軸的范圍往往來自于數(shù)據(jù)的范圍,,這是默認(rèn)生成的。但有時候我們想修改這個范圍,,或擴(kuò)大或縮小,,使數(shù)據(jù)涵蓋面更廣,或更集中更突出

這時,,我們可以使用 limits參數(shù):

  1. 對于連續(xù)型變量:應(yīng)當(dāng)設(shè)置為一個數(shù)字向量;如果只想設(shè)置一個上限或者下限,,那就設(shè)置另一個值為NA

  2. 對于離散型變量:就要設(shè)置字符向量,;列出所有的數(shù)據(jù)點(diǎn)

  1. df <> data.frame(x = 1:3, y = 1:3)

  2. base <> ggplot(df, aes(x, y)) + geom_point()

  3. ## 直接查看圖表

  4. base

  5. ## 查看其中一個區(qū)間,,系統(tǒng)會提示你丟失了兩個數(shù)據(jù)點(diǎn)

  6. base + scale_x_continuous(limits = c(1.5, 2.5))

  7. #> Warning: Removed 2 rows containing missing values (geom_point).

  8. ## 通過標(biāo)度設(shè)置x軸的范圍

  9. base + scale_x_continuous(limits = c(0, 4))

為了簡化上述命令,ggplot2包中提供了一些簡化的命令,,如,, xlim(), ylim()and lims()

我們可以作如下設(shè)置:

  1. xlim(10,20):設(shè)置x軸10-20連續(xù)的范圍

  2. ylim(20,10):設(shè)置y軸20-10連續(xù)的范圍

  3. xlim('a','b','c'):設(shè)置x軸三個離散的字符點(diǎn)

  4. xlim(as.Date(c('2008-05-01','2008-08-01'))):設(shè)置x軸為日期

實際上,圖表上的x,、y軸范圍比我們設(shè)置的要稍稍大一點(diǎn),。這是系統(tǒng)自動生成的,為了數(shù)據(jù)點(diǎn)不會出現(xiàn)在軸上,。

如果想修改這一點(diǎn),,可以設(shè)置 expand=c(0,0)

  1. ggplot(faithfuld, aes(waiting, eruptions)) +

  2.  geom_raster(aes(fill = density)) +

  3.  theme(legend.position = 'none')

  1. ggplot(faithfuld, aes(waiting, eruptions)) +

  2.  geom_raster(aes(fill = density)) +

  3.  scale_x_continuous(expand = c(0,0)) +

  4.  scale_y_continuous(expand = c(0,0)) +

  5.  theme(legend.position = 'none')

6.6 標(biāo)度工具箱(Scales Toolbox)

除了調(diào)整標(biāo)度的默認(rèn)選項之外,你也可以重新創(chuàng)建新的標(biāo)度,,主要分為以下四類:

  1. 連續(xù)型位置標(biāo)度:用于將整數(shù),、數(shù)值、日期/時間數(shù)據(jù)映射到x軸或者y軸的位置上,;

  2. 顏色標(biāo)度:用于將連續(xù)型或離散型變量映射到顏色,;

  3. 手動離散型標(biāo)度:將離散型變量映射到你選擇的大小、形狀,、顏色,、線條等;

  4. 同一型標(biāo)度:當(dāng)你的數(shù)據(jù)能被R中的繪圖函數(shù)理解時,,數(shù)據(jù)空間和圖形屬性空間相同時,,可以使用同一型標(biāo)度,此時默認(rèn)不繪制圖例的

下面我們四種圖例詳細(xì)說明:

1. 連續(xù)型位置標(biāo)度(Continuous Position Scales)

每個圖表都有兩個位置標(biāo)度,,即x和y,。因此,最常見的連續(xù)型位置標(biāo)度就是 scale_x_continuous()scale_y_continuous(),,它們可以將數(shù)據(jù)映射到x軸和y軸,。

每個連續(xù)型標(biāo)度都可以接受一個 trans參數(shù),允許指定若干種顯性或非線性變換,。每一種變換都是由所謂的變換器(“transformer”)實現(xiàn)的,。下表是比較常用的變換器:

(截圖選自《ggplot2(第一版)》)

注意:在最近更新的第二版ggplot2中,表中的倒數(shù)命令(recip)已經(jīng)改為(reciprocal),,其他未更新,。

如下例,將y軸轉(zhuǎn)換為倒數(shù)(reciprocal):

  1. ggplot(mpg, aes(displ, hwy)) +

  2.  geom_point() +

  3.  scale_y_continuous(trans = 'reciprocal')

將x軸/y軸數(shù)值轉(zhuǎn)化成log10:

  1. ggplot(diamonds, aes(price, carat)) +

  2.  geom_bin2d() +

  3.  scale_x_continuous(trans = 'log10') +

  4.  scale_y_continuous(trans = 'log10')

其中有一些參數(shù)有簡寫形式,,如,, scale_x_log10()scale_x_sqrt(),、 scale_x_reverse()

另外,,變換器同樣可以用于 coord_trans()中,,此時變換將在統(tǒng)計量計算完成后進(jìn)行,詳見第七章

日期和時間值基本上屬于連續(xù)型,,但在標(biāo)注坐標(biāo)軸時處理方式稍有不同,。我們使用 DatePOSIXct類的時間值。如果是其他格式的,,則應(yīng)當(dāng)使用 as.Dateas.POSIXct進(jìn)行轉(zhuǎn)換,。

scale_x_date()scale_x_datetime()的用法和 scale_x_continous用法相似。

date_breaks()date_labels()的用法稍有不同:

  • date_breaks()和 date_minor_breaks():可以設(shè)置日期間隔(年,、月,、星期、日,、小時,、每分、每秒)作為斷點(diǎn),,,;例如 date_breaks='2 weeks'

  • date_labels():通過 strptime()和 format()指定特殊格式,如下表

例如,,如果你想以 14/10/1979的形式顯示日期,,可以使用字符串 %d/%m/%y

再舉個栗子,,經(jīng)濟(jì)數(shù)據(jù)集(時間序列)中,,橫軸日期的不同表示方式:

  1. base <> ggplot(economics, aes(date, psavert)) +

  2.  geom_line(na.rm = TRUE) +

  3.  labs(x = NULL, y = NULL)

  4. base # 默認(rèn)間隔和時間表示方式

  1. base + scale_x_date(date_labels = '%y', date_breaks = '5 years')

取其中一小段時間 ('2004-01-01'-'2005-01-01'),按1個月為間隔:

  1. base + scale_x_date(

  2.  limits = as.Date(c('2004-01-01', '2005-01-01')),

  3.  date_labels = '%b %y',

  4.  date_minor_breaks = '1 month'

  5. )

取其中一小段時間 ('2004-01-01'-'2004-06-01'),,兩個星期為間隔:

  1. base + scale_x_date(

  2. limits = as.Date(c('2004-01-01', '2004-06-01')),

  3. date_labels = '%m/%d',

  4. date_minor_breaks = '2 weeks'

  5. )

2. 顏色標(biāo)度

除了位置之外,,顏色是最常用的圖形屬性。有很多方法可以將“值”映射成顏色

在最新的版本里,,對于連續(xù)型變量,,有四種基于漸變設(shè)置顏色的標(biāo)度; 對于離散型變量,,也有四種設(shè)置顏色的標(biāo)度

這里作者講了一部分關(guān)于色彩學(xué)的基礎(chǔ)理論,。顏色是由不同波長的光混合而成的,人類的眼球有三種不同顏色的感受器,,所以我們使用三個數(shù)字來表示任意顏色,,就是rgb編碼,這個色彩空間使用紅綠藍(lán)三種光強(qiáng)表示一種顏色,,但是它在視覺上的感知并不均勻,,由于色彩空間中位置不同,兩種間隔一個單位的顏色可以非常相似也可能非常不同,,這使得創(chuàng)建連續(xù)變量到一個顏色集的映射變得十分困難,。

在ggplot2中,,使用了一種名為HCL色彩空間(Hue-Chroma-Luminance)的現(xiàn)代方案,由三個部分構(gòu)成,,分別是色相(hue)、彩度(chroma)以及明度(luminance)

  1. 色相:是一個從0到360的角度值,,將一種色彩賦予顏色屬性(如紅橙黃藍(lán)等等)

  2. 明度:顏色的明暗程度,,即看其接近黑色或白色的程度,明度0是黑色,,1是白色,。

  3. 彩度:色彩的純度。0是灰色,,彩度的最大值隨明度變化而不同

下圖是這個色彩空間的三維形狀,,每個分面中明度是一個常數(shù),色相被映射成一個角度,,彩度被映射成半徑,,可以看到每個分面的中心都是灰色的,離邊緣越近顏色越濃烈:

Wikipedia上的HCL色彩空間長這樣

↓↓↓

連續(xù)型

在最新版本的ggplot2中,,根據(jù)顏色梯度中的色彩數(shù)量劃分,,有四類連續(xù)性顏色梯度

  1. 雙色梯度 —— scale_colour_gradient()或 scale_fill_gradient():順序為從低到高,使用 low和 high兩個參數(shù)控制此梯度兩端的顏色

舉例,,使用faithfuld數(shù)據(jù)集(黃石公園老忠實泉兩次爆發(fā)的間隔時間和每次噴發(fā)的時長)做光柵圖(Raster),,顏色標(biāo)度為默認(rèn)值時:

  1. erupt <> ggplot(faithfuld, aes(waiting, eruptions, fill = density)) +

  2.  geom_raster() +

  3.  scale_x_continuous(NULL, expand = c(0, 0)) +

  4.  scale_y_continuous(NULL, expand = c(0, 0)) +

  5.  theme(legend.position = 'none')

  6. ## 不修改顏色標(biāo)度

  7. erupt

修改顏色標(biāo)度:

  1. ## 黑白漸變

  2. erupt + scale_fill_gradient(low = 'white', high = 'black')

  1. ## 其他顏色漸變

  2. erupt + scale_fill_gradient(

  3.  low = munsell::mnsl('5G 9/2'),

  4.  high = munsell::mnsl('5G 6/8')

  5. )

  1. 三色梯度漸變 —— scale_colour_gradient2()或 scale_fill_gradient2():和雙色漸變類似,順序為低-中-高,。中點(diǎn)的默認(rèn)值是0,,但是可以使用參數(shù) midpoint加以設(shè)置為任意值。著多個參數(shù)對于形成發(fā)散型(diverging)配色方案非常有用,。

  1. ## 提取faithfuld數(shù)據(jù)集中density變量的中間值,,將其賦予mid

  2. mid <> median(faithfuld$density)

  3. ## 把mid設(shè)置為顏色區(qū)段的中間值

  4. erupt + scale_fill_gradient2(midpoint = mid)

  1. 自定義n色梯度—— scale_colour_gradientn()或 scale_fill_gradientn():此標(biāo)度需要賦予參數(shù) colours一個顏色向量。這對于有特殊意義的數(shù)據(jù)(比如表現(xiàn)地形等)很有用,。

其中可以使用另一個包 colorspace,,和調(diào)色盤類似的意思

  1. erupt + scale_fill_gradientn(colours = terrain.colors(7))

  2. erupt + scale_fill_gradientn(colours = colorspace::heat_hcl(7))

  3. erupt + scale_fill_gradientn(colours = colorspace::diverge_hcl(7))

  1. 使用ColorBrewer配色方案—— scale_color_distiller()和 scale_fill_gradient():可以通過設(shè)置 palette參數(shù)調(diào)整顏色

  1. erupt + scale_fill_distiller()

  2. erupt + scale_fill_distiller(palette = 'RdPu')

  3. erupt + scale_fill_distiller(palette = 'YlOrBr')

當(dāng)數(shù)據(jù)集中包含缺失值NA時,可以通過改變 na.value參數(shù),,默認(rèn)狀態(tài)下是灰色,,可以通過更改設(shè)置改變?nèi)笔е档念伾?/p>

如下例,設(shè)置一個文本框,,z變量中含有一個缺失值,,將z變量映射為顏色圖形屬性:

  1. df <> data.frame(x = 1, y = 1:5, z = c(1, 3, 2, NA, 5))

  2. p <> ggplot(df, aes(x, y)) + geom_tile(aes(fill = z), size = 5)

  3. p

  4. # 不顯示缺失值

  5. p + scale_fill_gradient(na.value = NA)

  6. # 突出缺失值

  7. p + scale_fill_gradient(low = 'black', high = 'white', na.value = 'red')

離散型

離散數(shù)據(jù)有四種顏色標(biāo)度。我們使用最基本的條形圖來舉例,。

首先是默認(rèn)的配色方案:

  1. df <> data.frame(x = c('a', 'b', 'c', 'd'), y = c(3, 4, 1, 2))

  2. bars <> ggplot(df, aes(x, y, fill = x)) +

  3.  geom_bar(stat = 'identity') +

  4.  labs(x = NULL, y = NULL) +

  5.  theme(legend.position = 'none')

  6. bars

  1. 使用 scale_colour_hue()或 scale_fill_hue()函數(shù)來修改配色,,它的意思是沿著HCL色輪選取均勻分布的色相來自動生成:

  1. bars + scale_fill_hue(c = 40)

  2. bars + scale_fill_hue(h = c(180, 300))

  1. 使用 scale_colour_brewer()或 scale_fill_brewer()參數(shù),,即采用colorbrewer配色方案。對于類別型數(shù)據(jù)中的點(diǎn)而言,,最好使的調(diào)色板是“Set1”,、“Dark2”;對于面積型數(shù)據(jù)而言,,最好用的調(diào)色板是“Set2”,、“Pastel1”、“Pastel2”以及“Accent”,。使用 RColorBrewer::displat.brewer.all可以列出所有調(diào)色板,。

  1. bars + scale_fill_brewer(palette = 'Set1')

  2. bars + scale_fill_brewer(palette = 'Set2')

  3. bars + scale_fill_brewer(palette = 'Accent')

  1. 使用 scale_colour_grey()或 scale_fill_grey()參數(shù),將離散型變量映射為從黑到白灰度不同的顏色:

  1. bars + scale_fill_grey()

  2. bars + scale_fill_grey(start = 0.5, end = 1)

  3. bars + scale_fill_grey(start = 0, end = 0.5)

  1. 使用 scale_colour_manual()或 scale_fill_manual()參數(shù)自制離散型顏色標(biāo)度,。點(diǎn)擊網(wǎng)址(https://github.com/karthik/wesanderson ),,你可以自己設(shè)計自己的調(diào)色板,然后用在你的作圖中,。舉個例子代碼如下:

  1. library(wesanderson)

  2. bars + scale_fill_manual(values = wes_palette('GrandBudapest'))

明亮的顏色更適用于散點(diǎn)圖,,而不適用于條形圖,過于刺眼,;淡色適用于條形圖,,但不適用于散點(diǎn)圖。下面舉幾個栗子,,感受一下~

3. 手動離散型標(biāo)度(The Manual Discrete Scales)

離散型標(biāo)度 scale_linetype(),、 scale_size_discrete()scale_shape()基本沒有選項。這些標(biāo)度按照一定的順序?qū)⒁蜃拥乃接成涞揭幌盗腥≈抵小?/p>

如果你要手動定制標(biāo)度,,使用一下幾種方式: scale_shape_manual(), scale_linetype_manual(), scale_colour_manual(),。手動型標(biāo)度有個重要的參數(shù)是 value,用于指定這個標(biāo)度該生成的值

加載數(shù)據(jù)集 msleep做例子:

  1. > msleep

  2. # A tibble: 83 x 11

  3.   name      genus  vore  order  conservation sleep_total sleep_rem sleep_cycle awake

  4.                                  

  5. 1 Cheetah   Acino carni Carni lc                 12.1     NA          NA     11.9

  6. 2 Owl monk Aotus  omni  Prima NA                 17.0      1.80       NA      7.00

  7. 3 Mountain Aplod herbi Roden nt                 14.4      2.40       NA      9.60

  8. 4 Greater Blari omni  Soric lc                 14.9      2.30        0.133  9.10

  9. 5 Cow       Bos    herbi Artio domesticated        4.00     0.700       0.667 20.0

  10. 6 Three-to Brady herbi Pilosa NA                 14.4      2.20        0.767  9.60

  11. 7 Northern Callo carni Carni vu                  8.70     1.40        0.383 15.3

  12. 8 Vesper m Calom NA    Roden NA                  7.00    NA          NA     17.0

  13. 9 Dog       Canis  carni Carni domesticated       10.1      2.90        0.333 13.9

  14. 10 Roe deer  Capre herbi Artio lc                  3.00    NA          NA     21.0

  15. # ... with 73 more rows, and 2 more variables: brainwt , bodywt

我們繪制其中兩個變量( brainwt, bodywt)關(guān)系的散點(diǎn)圖,,手動將變量 vore設(shè)置其中的顏色:

  1. plot <> ggplot(msleep, aes(brainwt, bodywt)) +

  2.  scale_x_log10() +

  3.  scale_y_log10()

  4. plot +

  5.  geom_point(aes(colour = vore)) +

  6.  scale_colour_manual(

  7.    values = c('red', 'orange', 'green', 'blue'),

  8.    na.value = 'grey50'

  9.  )

有一些情況下我們需要手動修改顏色并手動增加圖例,,如下:

(LakeHuron是一個時間序列數(shù)據(jù))

  1. huron <> data.frame(year = 1875:1972, level = as.numeric(LakeHuron))

  2. ggplot(huron, aes(year)) +

  3.  geom_line(aes(y = level + 5), colour = 'red') +

  4.  geom_line(aes(y = level - 5), colour = 'blue')

添加圖例,和上面的代碼貌似很像,,實則不同,,上面的顏色是我們指定的紅藍(lán),而下面的顏色是默認(rèn)生成的:

  1. huron <> data.frame(year = 1875:1972, level = as.numeric(LakeHuron))

  2. ggplot(huron, aes(year)) +

  3.  geom_line(aes(y = level + 5, colour = 'above')) +

  4.  geom_line(aes(y = level - 5, colour = 'below'))

再進(jìn)一步指定顏色并給圖例命名,,就要添加我們的 scale_colour_manual命令了:

  1. ggplot(huron, aes(year)) +

  2. geom_line(aes(y = level + 5, colour = 'above')) +

  3. geom_line(aes(y = level - 5, colour = 'below')) +

  4. scale_colour_manual('Direction',

  5. values = c('above' = 'red', 'below' = 'blue')

  6. )

4.同一型標(biāo)度(The Identity Scale)

這是一種很特殊的情況

當(dāng)你的數(shù)據(jù)能被R中的繪圖函數(shù)理解時,,即數(shù)據(jù)空間和圖形屬性空間相同,能使用同一型標(biāo)度 scale_identity

luv colors顏色數(shù)據(jù)集包含所有和R本身位置相對應(yīng)的數(shù)據(jù),,這里的數(shù)據(jù)本身就是顏色值(我們也就沒必要創(chuàng)造有意義的圖例),。下面顯示數(shù)據(jù)集的前6行:

  1. head(luv_colours)

  2. #> L u v col

  3. #> 1 9342 -3.37e-12 0 white

  4. #> 2 9101 -4.75e+02 -635 aliceblue

  5. #> 3 8810 1.01e+03 1668 antiquewhite

  6. #> 4 8935 1.07e+03 1675 antiquewhite1

  7. #> 5 8452 1.01e+03 1610 antiquewhite2

  8. #> 6 7498 9.03e+02 1402 antiquewhite3

點(diǎn)的顏色代表他們自身,即數(shù)據(jù)空間和圖形屬性空間完全重合:

  1. ggplot(luv_colours, aes(u, v)) +

  2.  geom_point(aes(colour = col), size = 3) +

  3.  scale_color_identity() +

  4.  coord_equal()


參考資料:

  1. Hadley Wickham(2016). ggplot2. Springer International Publishing. doi: 10.1007/978-3-319-24277-4

  2. 《R語言應(yīng)用系列叢書·ggplot2:數(shù)據(jù)分析與圖形藝術(shù)》

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多