首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中使用ggplot修复图例顺序?

如何在R中使用ggplot修复图例顺序?
EN

Stack Overflow用户
提问于 2021-07-08 23:46:36
回答 1查看 62关注 0票数 1

我正在使用ggplot2ggnewscale创建一个有2个图例的图。我试图实现的是修复独立图例的顺序,使它们始终以相同的顺序出现。下面的图片和代码显示了我遇到的问题的一个基本示例。

首先,创建一些数据并设置调色板:

代码语言:javascript
复制
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之间):

代码语言:javascript
复制
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的限制更改为更大的值,例如:

代码语言:javascript
复制
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总是在顶部……不管限制的范围有多大?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 23:51:12

您可以通过guide_xxxorder参数指定图例的顺序

代码语言:javascript
复制
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)) 

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68304814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档