R|ggplot2(五)|scale 修改默認設置

2021-03-02 表哥有話講

作者:dwzb,R語言中文社區專欄作者。知乎專欄:https://zhuanlan.zhihu.com/Data-AnalysisR

第一篇戳:R|ggplot2(一)|一個完整的繪圖流程

第二篇戳:R|ggplot2(二)|覆蓋柱狀圖各種需求

第三篇戳:R|ggplot2(三)|coord 系列函數坐標軸轉換

第四篇戳:R|ggplot2(四)|stat_ geom_ 和position

查看ggplot2包的官方文檔,我們可以看到scale系列函數構成是有一定規律的。如scale_fill_gradient scale_x_continuous

三個單詞用_連接

本文分為以下兩個部分

對顏色的各種修改(color fill)

對坐標軸的更改(x y)

顏色的函數名中,第二個單詞有color和fill兩個,看你分組使用的是哪一個就用哪一個,比如柱狀圖,fill是柱子的填充顏色,color是柱子的邊框顏色,一般我們都用fill接分組變量,這時就應該使用scale_fill_系列函數來更改顏色。再比如是geom_point作圖使用color分組,則加scale_color_系列函數。

根據第三個單詞的不同,更換的顏色分為以下幾種

1. 離散型

2. 連續型

這裡分成兩類,離散型和連續型

下面我們分為兩個部分

library(ggplot2)
p0 <- ggplot(mpg, aes(class))+geom_bar(aes(fill=drv))


p0
p0 + scale_fill_manual(values=c("red", "blue", "green"))
p0 + scale_fill_manual(values=c("4" = "red", "r" = "blue", "f" = "darkgreen"))

# hue
# 主要參數:h = c(0, 360) + 15, c = 100, l = 65
# h指定色域,範圍越大,顏色區分度越大。範圍整體移動改變取色區域
# c越大飽和度越高
p0
p0 + scale_fill_hue(l=8)
p0 + scale_fill_hue(l=100)
p0 + scale_fill_hue(c=200)
p0 + scale_fill_hue(h=c(15,100))
p0 + scale_fill_hue(h=c(15,100)+100)

p0 + scale_color_hue(h=c(15,100)) # 前面使用fill分組,用color系列無效
ggplot(mpg, aes(class))+geom_bar(aes(color=drv)) +
 scale_color_hue(h=c(15,100)) # 使用color分組才有效

# brewer
library(RColorBrewer)
display.brewer.all() # 展示所有顏色
# 主要是palette參數調用色板
p0
p0 + scale_fill_brewer() # 默認使用Blues調色板中的顏色
p0 + scale_fill_brewer(palette = "Greens")
p0 + scale_fill_brewer(palette = "Greens",direction = -1)

# grey
# 通過start end 兩個參數指定,都在0-1範圍內,0為黑,1為白
p0
p0 + scale_fill_grey()
p0 + scale_fill_grey(start=1, end=0)
p0 + scale_fill_grey(start=1, end=0.5)

# 連續型
df <- data.frame(
 x = runif(100),
 y = runif(100),
 z1 = rnorm(100),
 z2 = abs(rnorm(100))
)
pp0 <- ggplot(df, aes(x, y)) + geom_point(aes(colour = z1))

# gradient
# 使用參數指定節點顏色
pp0
pp0 + scale_color_gradient(low = "white", high = "black")
pp0 + scale_color_gradient2(low = "white", mid = "red", high = "black")
pp0 + scale_color_gradientn(colours = terrain.colors(10))

# distiller
# 將ColorBrewer的顏色應用到連續變量上
pp0 + scale_color_distiller(palette = "Spectral")
pp0 + scale_color_distiller(palette = "Greens")

# identity
# 直接使用所接顏色變量元素指向的顏色
# 如果不能代表顏色就會報錯
df0 <- data.frame(
 x = rep(1:4,each=2),
 y = rep(1:4, 2),
 colour = c("red", "green", "blue", "yellow")
)

ggplot(df0,aes(x,y)) +geom_point(aes(color=colour))
ggplot(df0,aes(x,y)) +geom_point(aes(color=colour)) + scale_color_identity()
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour))
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour)) + scale_fill_identity()
ggplot(df0,aes(x,y)) +geom_col(aes(fill=colour)) +
 scale_fill_identity(guide = "legend") # 把圖例加回來

以上函數我們查看幫助文檔看參數時,會發現有一個...,這代表除了本頁列舉的這些參數之外,這個函數還可以使用其他的參數,這些參數往往是幾個函數共有的,所以在另外一個地方列舉了出來。

我們直接輸入函數名稱查看原始碼時,會發現分為兩類

下面我將分別介紹這兩類函數的參數

離散型函數所有參數使用?discrete_scale命令查看,下面只使用其中比較常用的一部分,連續型函數同理

p0 <- ggplot(mpg, aes(class))+geom_bar(aes(fill=drv))
p0
p0 + scale_fill_manual("class", values=c("red", "blue", "green"))
p0 + scale_fill_manual(values=c("red", "blue", "green"),
                      breaks = c("4", "r", "f"),
                      labels = c("four", "rr", "rr"))
p0 + scale_fill_manual(values=c("red", "blue", "green"),
                      limits=c("4", "r"))
p0 + scale_fill_manual(values=c("red", "blue", "green", "black"),
                      limits=c("4", "r", "f", "6"))

pp0
pp0 + scale_color_gradient(low = "white", high = "black",
                          breaks=c(1,2,0.5),
                          labels=c("a","b","c"))
pp0 + scale_color_gradient("black", low = "white", high = "black",
                          limits=c(0.5,2))

這部分主要是對坐標軸做如下改變,比如

更改坐標軸名稱

更改x軸上標數的位置和內容

顯示對一個軸做統計變換

只展示一個區域內的點

更改刻度標籤的位置

實現上面的這些可以使用scale_x等函數,同時像xlab這樣的函數實現其中某一方面的功能,但是用起來更加方便

因為這裡的數據也有連續和離散之分,所以也要使用不同的函數來實現。

# 橫坐標是離散變量,縱坐標是連續變量
p0 <- ggplot(mtcars, aes(factor(cyl), mpg)) + geom_point()

# 其實scale_x_discrete函數主要參數也是上面顏色的離散變量函數的通用參數,在discrete_scale中查詢
p0 + scale_x_discrete("cyl") # 更改坐標軸名稱
p0 + scale_x_discrete(labels = c("4"="a","6"="b","8"="c"))  # 更改橫軸標度
p0 + scale_x_discrete(labels = c("4"="a","6"="b"))
p0 + scale_x_discrete(labels = letters[1:3])
p0 + scale_x_discrete(limits=c("4","6"))

# 連續變量可以更改標度,還可以進行統計變換
p0
p0 + scale_y_continuous("ylab_mpg")
p0 + scale_y_continuous(breaks = c(10,20,30))
p0 + scale_y_continuous(breaks = c(10,20,30), labels=scales::dollar)
p0 + scale_y_continuous(limits = c(10,30))

p0 + scale_y_reverse() # 縱坐標翻轉,小數在上面,大數在下面
p0 + scale_y_log10()
p0 + scale_y_continuous(trans = "log10")
p0 + scale_y_sqrt()

# 使用更簡單易用 的函數
p0 + xlab("cyl")
p0 + labs(x = "cyl")
p0 + ggtitle("ggtitle",subtitle = "subtitle")
p0 + xlim(c("4","6"))

# 更改刻度標籤的位置
p0 + scale_x_discrete(position = "top") +
 scale_y_continuous(position = "right")

公眾號後臺回復關鍵字即可學習

回復 R              R語言快速入門免費視頻 
回復 統計          統計方法及其在R中的實現
回復 用戶畫像   民生銀行客戶畫像搭建與應用 
回復 大數據      大數據系列免費視頻教程
回復 可視化      利用R語言做數據可視化
回復 數據挖掘   數據挖掘算法原理解釋與應用
回復 機器學習   R&Python機器學習入門 

相關焦點

  • ggplot2|從0開始繪製箱線圖
    2)修改異常點的屬性 設置outlier的 color, shape and size ggplot(ToothGrowth, aes(x=dose, y=lenscale_fill_brewer(palette="Dark2") + theme_classic()
  • R語言ggplot2統計作圖
    = "grey") +   #置信區間類型為豎線  geom_errorbar(aes(ymin=estimate-1.96*SE, ymax=estimate+1.96*SE), width=.1)
  • 用R語言的ggplot2繪製漂亮的圖形
    ggplot2 以美輪美奐的統計製圖能力位居各類繪圖軟體排名前列,同時此包功能也在增加。此文簡單介紹 ggplot2 的基本原理和操作,便於大家對 ggplot2 快速入門。ggplot() 作為泛型函數(gplot() 能快速作圖,卻不是泛型函數),能對任意類型的 R 對象進行可視化操作,這是 ggplot2 的精髓所在。
  • ggplot2|theme主題設置,詳解繪圖優化-「精雕細琢」
    ,legend可以對圖例進行細節的修改ggplot2 |legend參數設置,圖形精雕細琢,那theme有什麼用呢?先把scale做好,就是一張合格的圖;再處理theme,則是一張出色的圖。,caption = "熟能生巧")p可以看到上圖的標題,軸標籤和圖例已經默認設置好了,是否可以個性化修改呢?當然可以!!!R控制臺輸入?
  • ggplot2|詳解八大基本繪圖要素
    #默認分組設置, 即group=1p + geom_boxplot()#分組(group)也是ggplot2種映射關係的一種, 如果需要把觀測點按額外的離散變量進行分組處理, 必須修改默認的分組設置。
  • 超棒教程:如何用ggplot2繪製漂亮的統計圖形
    目  錄本期內容將會介紹 ggplot2 繪圖語法的基礎,以及如何調整圖形坐標軸的內容和外觀、修改圖形標題等內容。從一個默認的ggplot開始ggplot2的語法與R的基礎繪圖語法不同,根據基本元素,一個默認的ggplot圖需要指定以下內容:數據,美學和幾何圖形。
  • R語言繪圖之ggplot2
    那麼今天我們就為大家介紹一下目前在R語言中流行的繪圖包ggplot2。1. ggplot2的安裝:install.packages("ggplot2")。2. ggplot2的繪圖原理: ggplot2的核心理念是將繪圖與數據分離,數據相關的繪圖與數據無關的繪圖分離,並按圖層作圖。
  • R語言ggplot繪製峰巒圖繪製
    library(ggridges)library(ggplot2)#### Attaching package: 'ggplot2'## The following object is masked from 'package:ggridges':#### scale_discrete_manual# 查看示例數據head
  • ggplot2包的繪圖邏輯簡介
    上述代碼中沒有指定統計類型,但自動獲得identity,因為ggplot2會默認為每一種幾何類型都指定一種默認的統計類型,反之亦然。其中stat_identity表示不做任何的統計變換。>可以使用scale_color_manual函數或scale_color_brewer函數修改圖形的顏色。
  • R語言可視化——ggplot圖表配色技巧
    大家可以對比以上兩句代碼:我並沒有指定任何實際的顏色,只是將colour顏色屬性指定給離散變量cut或者連續變量depth,而輸出的圖表已經完成了默認的離散顏色映射和連續顏色漸變映射。對於以上兩種類型顏色使用場景,如果是要自行修改,則需要自行定義顏色標度:離散顏色標度:scale_colour_XXX:這裡最經常適用的三種情況第一種情況,使用ggthemes包中的顏色主題,其中有些非常流行的顏色主題,如經濟學人的主題scale_colour_economist()、scale_colour_wsj(),還有excel
  • R語言 ggplot2 繪圖入門,看完你就理解ggplot2的繪圖邏輯了
    R語言最擅長的繪圖包是ggplot2,由於很多朋友沒有接觸過ggplot2,必須要對其語言方式有個初步的認識。所以入門學習是必須的。公眾號先前若干篇文章已經介紹ggplot2繪圖的基本方法(具體可以關注文末連結),為推動學習,今天介紹再次系統的一番。
  • 【R畫圖】手把手教你使用ggplot2繪製折線圖
    以上繪製的折線圖,均採用默認格式,不論是顏色、形狀、大小還是透明度,均沒有給出自定義的格式。其實ggplot2包也是允許用戶根據自己的想法設置這些屬性的。#自定義線條或點的顏色--scale_color_manual()#自定義線條類型--scale_linetype_manual()#自定義點的形狀--scale_shape__manual()#自定義點的大小或線條的寬度--scale_size__manual()#自定義透明度--scale_alpha__manual()綜合的例子:
  • Python語言plotnine VS R語言ggplot2
    ggplot2包利用圖層疊加的繪圖方式,往圖像上不斷的添加圖形元素、注釋、統計結果等內容。plotnine庫可以看作是在Python中對ggplot2包的一種實現,方便Python對數據可視化的應用。本文章會分別介紹在R和Python中,如何使用相關的庫進行數據可視化分析。對比分析兩個庫的使用情況。1.
  • R筆記3:ggplot繪製商務圖表--雜誌級商業圖表
    library(ggplot2)p <- ggplot(mydat2,aes(x=quarter,y=count,fill=company))+ geom_bar(stat="identity",position="dodge")p
  • R-ggplot2 標準中國地圖製作
    由於基礎圖表繪製系列推文還在加緊準備中,所以這期推文還是對一些感興趣的圖表進行繪製,這期涉及空間圖表繪製,主要涉及知識點如下:ggplot2 + sf 中國標準地圖繪製本期的繪圖我們是按照如下圖表進行繪製的(該圖來自朋友公號):
  • 基於ggplot2包繪製SCI學術箱線圖的保姆級教程
    2. 繪製基本箱線圖使用ggplot2包繪製箱線圖很簡單,主要使用geom_boxplot()函數,先採用默認的參數繪製。install.packages("ggplot2")library(ggplot2)plot_pir <- ggplot(data = box_data,aes(x = Type, y = AOD_550nm))+  geom_boxplot(aes(fill=Type))+  labs(caption
  • 空間地理數據可視化之 ggplot2 包及其拓展
    基本畫圖設置ggplot2[2]是一個基於圖形語法來創建圖形的包,因此我們可以使用 ggplot() 函數和以下元素創建一個圖:指定數據的幾何形狀,如點或條。更多設置在 ggplot() 中,離散變量的默認色標是 scale_*_hue() ,這裡 * 表示顏色(為點和線等特徵著色)或填充(為多邊形或柱狀圖著色);scale_*_grey() 用來改變灰色顏色的默認比例, scale_*_distiller()、 scale_*_brewer() 使用 RColorBrewer 包的顏色(Neuwirth
  • R語言可視化學習筆記之ggridges包
    )# grid.arrange來自於gridExtra包,可以同時拼圖多個ggplot2對象library(gridExtra)my_data <- data.frame(x=1:5, y=rep(1,5), height=c(0,1,-1,3,2))plot_base <- ggplot(my_data, aes(x, y, height
  • 昨晚熬夜整理的超級R繪圖技巧——USing ggplot(下)
    ggplot(worldpop,aes(Year,Population))+  geom_line()+  geom_point()+  scale_y_log10()  36.Theme設置圖形的網格線# panel.grid.major = element_line()修改網格主線
  • 溫故而知新,ggplot2 餅圖的幾點筆記
    mapping 中 aes(fill) 的因子順序,譬如這裡會按照 dat$type 填充,這種非有序因子會基於字母順序來默認其填充順序。", direction=1)+  scale_fill_brewer(palette ="Set3", direction = 1)+  labs(x="", y="", fill="Type")+  ggtitle(label ="test", subtitle=NULL)p_pie結合下圖結果可以看出坐標軸方向使順時針,而顏色設置 scale_fill_brewer