ChatGPT解决这个技术问题 Extra ChatGPT

删除图例 ggplot 2.2

我试图保持一层(平滑)的图例并删除另一层(点)的图例。我尝试用 guides(colour = FALSE)geom_point(aes(color = vs), show.legend = FALSE) 关闭图例。

编辑:由于这个问题及其答案很受欢迎,一个可重复的例子似乎是有序的:

library(ggplot2)
ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

https://i.stack.imgur.com/Im5Kh.png

一个最小的可重现示例会简单得多。在长长的代码行中,似乎有很多不必要的(对于手头的问题)代码,而且它在当前编写时完全不可重现。

A
Andrew

来自 r cookbook,其中 bp 是您的 ggplot:

删除特定美学(填充)的图例:

bp + guides(fill="none")

指定比例时也可以这样做:

bp + scale_fill_discrete(guide="none")

这将删除所有图例:

bp + theme(legend.position="none")

作为对@Alex 评论的回复:请注意,theme_bw() 可能会干扰使用 theme() 完成的任何定义。使用 theme_bw() 时,请确保在更改任何其他主题选项之前将其添加到绘图中。
但是当我做这样的事情 bp + theme(legend.position="none") + theme_classic() 时,传说又回来了。那么如何去除呢?
@loveR 将 theme_classic 放在首位:bp + theme_classic() + theme(legend.position="none")
这对我的情节没有影响。我成功地使用了@Tjebo 的方法。
对于中间示例,guide=FALSE 已被弃用。现在他们建议使用 guide="none"
z
zx8754

可能有另一种解决方案:您的代码是:

geom_point(aes(..., show.legend = FALSE))

您可以在 aes 调用之后指定 show.legend 参数:

geom_point(aes(...), show.legend = FALSE)

那么相应的图例应该消失


这是一个非常好的方法。也更直观。
当我使用 geom_text 对彩色线条进行注释时,这是从图例中删除字母的解决方案。没有 scale_label 命令(这也没有意义),并且 guide(label = FALSE) 也不起作用。谢谢!
P
PatrickT

由于问题和 user3490026 的答案是热门搜索,因此我制作了一个可重复的示例并简要说明了迄今为止提出的建议,以及明确解决 OP 问题的解决方案。

ggplot2 所做的一件可能令人困惑的事情是,当某些图例与同一个变量相关联时,它会自动混合这些图例。例如,factor(gear) 出现两次,一次用于 linetype,一次用于 fill,从而形成一个组合图例。相比之下,gear 有自己的图例条目,因为它不被视为与 factor(gear) 相同。到目前为止提供的解决方案通常效果很好。但有时,您可能需要覆盖指南。请参阅底部的最后一个示例。

# reproducible example:
library(ggplot2)
p <- ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs)) +
geom_point(aes(shape = factor(cyl))) +
geom_line(aes(linetype = factor(gear))) +
geom_smooth(aes(fill = factor(gear), color = gear)) + 
theme_bw() 

https://i.stack.imgur.com/PPcHn.png

删除所有图例:@user3490026

p + theme(legend.position = "none")

删除所有图例:@duhaime

p + guides(fill = FALSE, color = FALSE, linetype = FALSE, shape = FALSE)

关闭图例:@Tjebo

ggplot(data = mtcars, aes(x = mpg, y = disp, group = gear)) +
geom_point(aes(color = vs), show.legend = FALSE) +
geom_point(aes(shape = factor(cyl)), show.legend = FALSE) +
geom_line(aes(linetype = factor(gear)), show.legend = FALSE) +
geom_smooth(aes(fill = factor(gear), color = gear), show.legend = FALSE) + 
theme_bw() 

删除填充,使线型变得可见

p + guides(fill = FALSE)

通过 scale_fill_ 函数与上述相同:

p + scale_fill_discrete(guide = FALSE)

现在是对 OP 要求的一种可能答案

“保持一层(平滑)的图例并删除另一层(点)的图例”

打开一些关闭一些临时的事后

p + guides(fill = guide_legend(override.aes = list(color = NA)), 
           color = FALSE, 
           shape = FALSE)  

https://i.stack.imgur.com/HG211.png


刚刚注意到最后一个图中的蓝色填充颜色没有出现在图表上,不知道为什么......
运行代码后键入 warnings(),您将看到蓝丝带未显示的原因。
@markus:明白了,谢谢!我不会费心编辑这个例子,因为这个问题是分开的。但是,如果不计算 se 的图例,它就没有什么意义了。在 github 上可能值得一个问题,但我现在没有精力......
@PatrickT 您可能希望将答案更新为例如 color = "none" 而不是 color = FALSE,因为现在不推荐使用 FALSE 版本。
d
duhaime

如果您的图表同时使用 fillcolor 美学,您可以删除图例:

+ guides(fill=FALSE, color=FALSE)

关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅