首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >geom_vline()图例的位置移动

geom_vline()图例的位置移动
EN

Stack Overflow用户
提问于 2017-04-25 15:27:01
回答 1查看 432关注 0票数 2

我有几个类似下面的图。我的问题是geom_vline() (类型)的图例会在不同的图中移动,有时会出现在"Mean“图例的上方,有时会出现在下方。

如何指定geom_vline()图例(或其他图例)的位置,使我的论文中的绘图不会发生变化?

代码语言:javascript
复制
set.seed(1234)
data <- data.frame(value = rnorm(n = 10000, mean = 50, sd = 20),
                   Type = sample(letters[1:2], size = 10000, replace = TRUE))
data$value[data$Type == "b"] <- data$value[data$Type == "b"] +
    rnorm(sum(data$Type == "b"), mean = 55)

gp <- ggplot(data = data, aes_string(x = "value"))
gp <- gp + geom_density(aes_string(fill = "Type"), alpha = 0.3)

vlines <- data.frame(value = c(mean(data$value[data$Type == "a"]),
                               mean(data$value[data$Type ==  "b"])), 
                     Mean = c("A", "B"))

gp2 <- gp + geom_vline(data = vlines, aes(xintercept = value, colour = Mean),
                       size = 1.05, linetype = "dashed", show.legend = TRUE)
gp3 <- gp2 + geom_vline(xintercept = (50 + 55 + 50) / 2, size = 1.05)

gp3
EN

回答 1

Stack Overflow用户

发布于 2017-04-25 15:47:53

对于要重新排列的辅助线,可以将传递给scale_*函数的guide参数的guide_legendorder参数传递给它们。例如:

代码语言:javascript
复制
library(ggplot2)
set.seed(1234)

data <- data.frame(value = rnorm(n = 10000, mean =50, sd = 20),
                   Type = sample(letters[1:2], size = 10000, replace = TRUE))
data$value[data$Type == "b"] <- data$value[data$Type == "b"] +
    rnorm(sum(data$Type == "b"), mean = 55)

vlines <- data.frame(value = c(mean(data$value[data$Type == "a"]),
                               mean(data$value[data$Type ==  "b"])), 
                     Mean = c("A", "B"))

ggplot(data, aes(x = value)) + 
    geom_density(aes(fill = Type), alpha = 0.3) + 
    geom_vline(data = vlines, aes(xintercept = value, colour = Mean),
               size = 1.05, linetype = "dashed", show.legend = TRUE) + 
    geom_vline(xintercept = (50 + 55 + 50) / 2, size = 1.05) + 
    scale_fill_discrete(guide = guide_legend(order = 1)) +    # fill first
    scale_color_discrete(guide = guide_legend(order = 2))     # color second

代码语言:javascript
复制
ggplot(data, aes(x = value)) + 
    geom_density(aes(fill = Type), alpha = 0.3) + 
    geom_vline(data = vlines, aes(xintercept = value, colour = Mean),
               size = 1.05, linetype = "dashed", show.legend = TRUE) + 
    geom_vline(xintercept = (50 + 55 + 50) / 2, size = 1.05) + 
    scale_fill_discrete(guide = guide_legend(order = 2)) +    # now fill second
    scale_color_discrete(guide = guide_legend(order = 1))     # and color first

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

https://stackoverflow.com/questions/43604233

复制
相关文章

相似问题

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