合并调色板颜色colorRampPalette并使用ggplot打印
我正在尝试使用合并调色板颜色colorRampPalette并使用ggplot打印,r,ggplot2,colors,leaflet,maps,R,Ggplot2,Colors,Leaflet,Maps,我正在尝试使用ggplot2进行复制,这是我之前使用的一个问题。我试图合并两个选项板,其中一个在变量低于某个阈值时使用,另一个在高于某个阈值时使用。正如我在我的传单中所做的那样,我的最终情节似乎并不正确。我还想将因子图例转换为连续图例。示例代码: library(sf) library(leaflet) library(RColorBrewer) # preparing the shapefile nc <- st_read(system.file("gpkg/nc.gpkg", p
ggplot2
进行复制,这是我之前使用的一个问题。我试图合并两个选项板,其中一个在变量低于某个阈值时使用,另一个在高于某个阈值时使用。正如我在我的传单中所做的那样,我的最终情节似乎并不正确。我还想将因子图例转换为连续图例。示例代码:
library(sf)
library(leaflet)
library(RColorBrewer)
# preparing the shapefile
nc <- st_read(system.file("gpkg/nc.gpkg", package="sf"), quiet = TRUE) %>%
st_transform(st_crs(4326)) %>%
st_cast('POLYGON')
# Create 108 categories
mutate(nc, category = ntile(PERIMETER, n = 108)) -> nc
x <- sum(nc$PERIMETER < 1.3)
x # number of values below threshold = 21
### Create an asymmetric color range
## Make vector of colors for values smaller than 1.3 (21 colors)
rc1 <- colorRampPalette(colors = c("#006837", "#1A9850"), space = "Lab")(x) #21
## Make vector of colors for values larger than 1.3
rc2 <- colorRampPalette(colors = c("#FDAE61", "#A50026"), space = "Lab")(length(nc$PERIMETER) - x)
## Combine the two color palettes
rampcols <- c(rc1, rc2)
mypal <- colorFactor(palette = rampcols, domain = nc$category)
previewColors(colorNumeric(palette = rampcols, domain = NULL), values = 1:length(nc$PERIMETER))
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(nc$category), guide = FALSE)
给出了正确的绘图:
您可以看到ggplot
图与我无法修复的图不一样
此外,当我向ggplot
添加图例时,我会得到新调色板的因子图例,但我想要一个连续的图例(即使变量是因子):
有人知道如何解决着色问题并以连续形式修改相关图例吗?谢谢我认为是由于使用了factor()
,使用了以下代码造成的:
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(levels(factor(nc$category))), guide = FALSE)
给你一张和传单颜色一样的地图
对于任何人来说,我能找到的最接近的答案是在这之后使用scale
软件包,而不是scale\u fill\u manual
。使用这种方法,我不再使用mypal
,而是在切点手动输入颜色,用1.299
代替1.3
(重新缩放(c(.999,1.2999,1.3,3.640))
代替重新缩放(c(.999,1.2999,1.3,3.640))
)
给予:
谢谢,颜色已经分类了!您知道如何合并一个连续的图例,但保持比例\u填充\u手册
?
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(nc$category))
nc %>%
ggplot() +
geom_sf(aes(fill = factor(category))) +
scale_fill_manual(values = mypal(levels(factor(nc$category))), guide = FALSE)
library("scales")
range(nc$PERIMETER)
#[1] 0.999 3.640
nc %>%
ggplot() +
geom_sf(aes(fill = PERIMETER)) +
scale_fill_gradientn(colours = c("#006837", "#1A9850", "#FDAE61", "#A50026"),
values = rescale(c(.999, 1.2999, 1.3, 3.640))
#guide = "colorbar"
#limits=c(-.1,.3)
)