我正在使用ggplot2和ggnewscale创建一个有2个图例的图。我试图实现的是修复独立图例的顺序,使它们始终以相同的顺序出现。下面的图片和代码显示了我遇到的问题的一个基本示例。
首先,创建一些数据并设置调色板:
df <- data.frame(x = c(1:5), y = runif(10))
df_1 <- data.frame(x = c(1:5), y = runif(10))
pal_1 = rev(colorspace::sequential_hcl(palette = "Blues 3", n = 10))
pal_2 = rev(colorspace::sequential_hcl(palette = "Reds 3", n = 10))现在创建一个图(请注意,我为图例设置的限制介于0和1之间):
library(ggplot2)
library(ggnewscale)
ggplot(df, mapping = aes(x, y)) +
geom_point(size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_1, limits = c(0,1), name = "val1") +
new_scale_fill() +
geom_point(data = df_1, size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_2, limits = c(0,1), name = "val2") 这将产生以下图像(请注意,val1的图例位于顶部):

现在,如果我们将val2的限制更改为更大的值,例如:
ggplot(df, mapping = aes(x, y)) +
geom_point(size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_1, limits = c(0,1), name = "val1") +
new_scale_fill() +
geom_point(data = df_1, size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_2, limits = c(0,10), name = "val2") 我们将获得以下内容(请注意,val2图例现在位于顶部:

看起来ggplot会把限制范围更大的图例放在最上面。我想知道是否有一种方法可以修复图例的顺序,这样,比如说val1总是在顶部……不管限制的范围有多大?
发布于 2021-07-08 23:51:12
您可以通过guide_xxx的order参数指定图例的顺序
df <- data.frame(x = c(1:5), y = runif(10))
df_1 <- data.frame(x = c(1:5), y = runif(10))
pal_1 = rev(colorspace::sequential_hcl(palette = "Blues 3", n = 10))
pal_2 = rev(colorspace::sequential_hcl(palette = "Reds 3", n = 10))
library(ggplot2)
library(ggnewscale)
ggplot(df, mapping = aes(x, y)) +
geom_point(size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_1, limits = c(0,1), name = "val1",
guide = guide_colorbar(order = 1)) +
new_scale_fill() +
geom_point(data = df_1, size = 3, aes(fill = y)) +
scale_fill_gradientn(colors = pal_2, limits = c(0,10), name = "val2",
guide = guide_colorbar(order = 2))

https://stackoverflow.com/questions/68304814
复制相似问题