今天以geom_point()函數(shù)為例來探索一下顏色的自定義設置。在ggplot2畫圖思維中最重要的一點是圖層概念(即幾何對象)。后面添加的圖層就在上面,那么諸如大小和顏色之類的就會有重疊或者是覆蓋前面的可能。
1.映射顏色設置(放在ggplot()中還是在geom_point()中不受影響)
所謂映射顏色就是按照數(shù)據框中某一列(通常來說該列的數(shù)據類型是個factor)由函數(shù)默認來分配顏色,該列有幾種非重復值就分配對應的幾種顏色,下面例子中color = Species,該列中有setosa, versicolor, virginica三種類型的值。通常class()函數(shù)來查看該列的數(shù)據類型,不建議用mode()函數(shù)。查看對應值類型用table()函數(shù)。
下面的兩個代碼出來的是一樣的圖。
library(ggplot2)
test = iris
#放在ggplot()
ggplot(data = test,mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
geom_point()
#放在geom_point()
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))
class(test$Species) # “factor"
mode(test$Species) # "numeric"
table(test$Species) # setosa versicolor virginica

注意映射顏色的代碼中color = Species不能寫成 color = "Species"。否則會出現(xiàn)顏色名為Species(事實上是紅色)的單一色,圖例的名稱也變了(colour)。不加引號代表的是數(shù)據框的Species這一列,加了引號就變成了具體某一顏色("Species"是個字符型數(shù)據)

2.單一顏色設置(ggplot()中還是在geom_point()中不一樣)
#設置無效
ggplot(data = test,mapping = aes(x = Sepal.Length,
y = Petal.Length),
color = "red")+
geom_point()
#設置有效
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,),
color = "red")
放在前面ggplot()中的結果,盡管 color = "red"設置了紅色,不屬于映射顏色(放在了aes()函數(shù)的外面),注意這個時候的red 一定要加上引號,后面的geom_point()有默認黑色,故而紅色被后面的圖層覆蓋了。

放在后面的geom_point()中的結果,color = "red"設置的紅色效果就呈現(xiàn)出來了,注意這兩張圖出來的都沒有l(wèi)egend。(這個以后慢慢探討)

3.自定義顏色設置
大部分情況下我們的需求是要修改每一個對應的顏色(不想默認分配的顏色),不是修改成單一的顏色(這樣修改完全沒意義也沒必要),這個時候scale_color_manual()函數(shù)就派上大用場了,它屬于scale_manual()系列里的,這個系列的函數(shù)在手動設置功能強大,可以慢慢探索,滿足各種實戰(zhàn)需求。
#手動設置自己想要的顏色
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = c("blue","grey","red"),)
#還可以設置修改圖例的名稱
ggplot(data = test)+
geom_point(mapping = aes(x = Sepal.Length,
y = Petal.Length,
color = Species))+
scale_color_manual(values = c("blue","grey","red"),
name = "Spe")

這里再補充一個小技巧,有些時候圖例的名稱也需要修改一下,一般默認名稱是映射顏色的那一列的列名(比如前面圖中的Species,當然你可以改一下數(shù)據框中該列的列名,但一般不推薦)。scale_color_manual()中有個參數(shù) name,設置一下就可以修改成你想要的名稱,是不是很酷哦!
