我試圖在ggplot中用geom_sf的幾何圖形制作一個圖形。我可以使用scale_fill_scontinuous繪制圖形,但是我想把我的標題分成不連續的區間,這樣我就可以不使用scale_fill_scontinuous,而是使用scale_fill_brewer。
我不想在 ggplot 之外創建一個中間的 data.frame 或一個矢量,
目前我的圖表是這樣的:
ggplot(data=uniao3。 aes(fill=`área úmida`)) >
geom_sf() 。
scale_fill_continuous(limits=c(0。 20000),
breaks=c(500。 2000。 8000, 15000, 20000),
labels=c('500'。 '200-2k'。 '2k-8k','8k-15k', '15k> '),
name="Wetland")
facet_wrap(~Ano)
我希望圖例(比例)不是以梯度的形式呈現,而是以類似這樣的塊狀形式呈現:
我知道scale_fill_brewer命令可以非常優雅和有效地做到這一點,但我如何在ggplot內將我的連續變數設定為離散變數?
uj5u.com熱心網友回復:
我會選擇scale_fill_stepsn,盡管在評論中還有其他多種解決方案。該函式根據你所需要的breaks來處理連續變數的離散性,并且它允許使用colours向量中的任何顏色(不僅僅是預制的調色板)。
另一個優點是,斷點和顏色向量的長度不需要匹配。
獲取一個sf物件
library(ggplot2)
library(sf)
#> 鏈接到GEOS 3.8.1, GDAL 3.2.1, PROJ 7.2.1
# get sf data[/span]。
nc <- sf::st_read(/span>system.file("shape/nc. shp",包="sf")。 安靜 = TRUE)
使用scale_fill_stepsn
這可能是最簡單和最充分的方法,適用于連續的資料,它被切割成不連續的片斷。
# set breaks and colours。
breaks <- seq(0, 0. 3,由= 0.02)
休息時間
#> [1] 0.00 0.02 0.04 0.06 0.08 0.10 0.12 0.14 0.16 0.18 0.20 0.22 0.24 0.26 0.28
#> [16] 0.30
cols <- RColorBrewer::brewer. pal(9, "Spectral")
cols
#> [1] "#D53E4F" "#F46D43" "#FDAE61" "#FEE08B" "#FFFFBF" "#E6F598" "#ABDDA4" /span>
#> [8] "#66C2A5" "#3288BD"
# plot
ggplot(data = nc, aes(fill= AREA)
geom_sf()
scale_fill_stepsn(colours = cols,
breaks = breaks,
name = "area")
theme_minimal()

注意,為了清晰起見,我在ggplot呼叫之外分配了斷點和列點,但你當然可以在ggplot呼叫中直接指定它們。
使用scale_fill_brewer
這對于真實的離散的資料來說是比較合適的,但是對于離散的連續資料也是適用的。
在這里,你需要在設定比例之前自己進行切割。在您的ggplot2呼叫中使用cut并指定breaks將把您的數字變數變成一個因子。
關于使用scale_fill_brewer的顏色選擇,它的靈活性要差一些,因為你需要(?)使用一個現有的RColorBrewer調色板。
這樣一來,顏色圖例看起來更類似于你的例子圖例,每個切口都被標示出來,而不是斷點。
# plot
ggplot(data = nc, aes(fill = cut(AREA, breaks = seq(0,/span> 0. 3, 由= 0. 02)))
geom_sf()
scale_fill_brewer(type = "qual",
# labels = labels, # if you must
palette = "Spectral",
name = "area")
theme_minimal()

創建于2021-09-19,由reprex包(v2.0.1)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330206.html
標籤:

