动态标注ggplot Scale_*_Identity

问题描述 投票:0回答:1

我正在尝试创建一个绘图,其中每个人都有一个唯一的十六进制代码,并且我想使用

scale_color_identity()
进行绘图。我还想在
labels
中使用
scale_color_identity()
来获取要在图例中显示的每个人的实际姓名。我知道当您专门调用
ggplot
之外的字符串时,这是可能的,但我正在尝试为多种场景生成此内容,并且希望能够避免这种情况,而是调用正在绘制的数据集中的另一个变量。下面的例子是我目前必须这样做的。

library(ggplot2)

FakeData <- data.frame(Name = c("Bob Jungels", "Bob Jungels","Bob Jungels", "Sepp Kuss", "Sepp Kuss", "Sepp Kuss", "Egan Bernal", "Egan Bernal", "Egan Bernal"),
                       TeamColor = c("#00ab8e", "#00ab8e", "#00ab8e", "#ffe100", "#ffe100", "#ffe100", "#b61615", "#b61615", "#b61615"),
                       Distance = c(0, 60, 120, 0, 60, 120, 0, 60, 120),
                       Place = c(1, 1, 35, 75, 17, 1, 65, 10, 3))

FakeData$Name <- factor(FakeData$Name, levels = c("Bob Jungels", "Sepp Kuss", "Egan Bernal"))

ggplot(FakeData) +
  geom_line(aes(x = Distance, y = Place, color = Name), size = 1.5) +
  scale_color_manual(values = c(FakeData %>% distinct(TeamColor) %>% .$TeamColor))

我想做的,但似乎它还没有识别数据集中的任何变量。

ggplot(FakeData) +
  geom_line(aes(x = Distance, y = Place, color = TeamColor), size = 1.5) +
  scale_color_identity(labels = Name)

这会产生错误check_breaks_labels(breaks,labels)中的错误:找不到对象“Name”

我需要将此图应用于许多不同的数据过滤器,而上面的第一种方法对此并不理想。有没有人尝试做我所要求的事情?我环顾四周,但没有发现太多东西。

r ggplot2 colors aes
1个回答
0
投票

您只能直接在

aes()
内引用列名称,否则您需要显式引用数据框。您还需要使用
levels()
以正确的顺序获取唯一值,并明确指定
guide
(如果需要)。

library(ggplot2)

ggplot(FakeData) +
  geom_line(aes(x = Distance, y = Place, color = TeamColor), linewidth = 1.5) +
  scale_color_identity("Name", labels = levels(FakeData$Name), guide = guide_legend())

© www.soinside.com 2019 - 2024. All rights reserved.