更改 ggplot 图例标题
Change ggplot legend title
所以这是我的 ggplot 代码。如何最简单地更改图例的标题?我知道我可以将 gg_group
变量更改为 my_title <- c(rep("train",10), rep("validation", 10))
。但我只想将标题更改为“whatever I want
”而不更改任何变量。
library(ggplot2)
y <- c(rnorm(10,1), rnorm(10,3))
x <- rep(seq(1,10,1),2)
gg_group <- c(rep("train",10), rep("validation", 10))
gg_data <- data.frame(y=y, x=x, gg_group=gg_group)
p <- ggplot(gg_data, aes(x=x, y=y, group=gg_group))
p + geom_line(aes(colour=gg_group))
我也试过这个代码:
p + geom_line(aes(colour=gg_group)) +
scale_shape_discrete(name="Dataset",labels=c("Train", "Validation"))
但这不起作用。 *编辑,检查来自 Jaap 和 JasonAizkalns 的伟大 snwer。
@Jaap 是正确的。如果您使用 scale_color_discrete
,您可以使用 name 更改图例的名称,并且您不必将任何参数传递给 labels
,因为它们将采用您的 colour
审美中定义的名称。那就是考虑两者之间的差异:
p + geom_line(aes(colour = gg_group)) +
scale_color_discrete(name = "Dataset")
和
p + geom_line(aes(colour = gg_group)) +
scale_color_discrete(name = "Dataset",
labels = c("New Label 01", "New Label 02"))
它不起作用的原因是您没有在 ggplot
代码中使用 shape
。相反,您应该使用 scale_color_discrete
,如下所示:
scale_color_discrete("Dataset")
所以这是我的 ggplot 代码。如何最简单地更改图例的标题?我知道我可以将 gg_group
变量更改为 my_title <- c(rep("train",10), rep("validation", 10))
。但我只想将标题更改为“whatever I want
”而不更改任何变量。
library(ggplot2)
y <- c(rnorm(10,1), rnorm(10,3))
x <- rep(seq(1,10,1),2)
gg_group <- c(rep("train",10), rep("validation", 10))
gg_data <- data.frame(y=y, x=x, gg_group=gg_group)
p <- ggplot(gg_data, aes(x=x, y=y, group=gg_group))
p + geom_line(aes(colour=gg_group))
我也试过这个代码:
p + geom_line(aes(colour=gg_group)) +
scale_shape_discrete(name="Dataset",labels=c("Train", "Validation"))
但这不起作用。 *编辑,检查来自 Jaap 和 JasonAizkalns 的伟大 snwer。
@Jaap 是正确的。如果您使用 scale_color_discrete
,您可以使用 name 更改图例的名称,并且您不必将任何参数传递给 labels
,因为它们将采用您的 colour
审美中定义的名称。那就是考虑两者之间的差异:
p + geom_line(aes(colour = gg_group)) +
scale_color_discrete(name = "Dataset")
和
p + geom_line(aes(colour = gg_group)) +
scale_color_discrete(name = "Dataset",
labels = c("New Label 01", "New Label 02"))
它不起作用的原因是您没有在 ggplot
代码中使用 shape
。相反,您应该使用 scale_color_discrete
,如下所示:
scale_color_discrete("Dataset")