Я пытаюсь построить график, который имеет две разные цветовые шкалы. Первый предназначен для меток оси Y, а второй - для точек geom_points. Вот пример моих данных и кода, над которым я работаю.
library(tidyverse)
library(readxl)
library(scales)
library(ggplot2)
variable <- c("Var1","Var1","Var1","Var1","Var1","Var1","Var1","Var1","Var1","Var1","Var18","Var18","Var18","Var18","Var18","Var18","Var18","Var18","Var18","Var30","Var30","Var30","Var30","Var30","Var4","Var4","Var4","Var4","Var4","Var4","Var4","Var4","Var4","Var4","Var63","Var63","Var63","Var63","Var63")
Type <- c("Type1","Type1","Type1","Type1","Type1","Type1","Type1","Type1","Type1","Type1","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type3","Type3","Type3","Type3","Type3","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2","Type2")
value <- c(8422,6795,5845,7348,5184,1035,481,401,873,1616,7.39099,9.913625,25.8478505,6.2130315,1.3530115,0.2089435,0.041442,5.855607,0.5863545,0.058472901,0.063211708,0.282500045,0.340304871,0.101131024,104,283,136,148,326,65,63,77,71,92,0.001131,9.20E-05,0.000267,0.000284,3.50E-05)
Class <- c("Class1","Class1","Class1","Class1","Class1","Class2","Class2","Class2","Class2","Class2","Class1","Class1","Class1","Class1","Class2","Class2","Class2","Class2","Class2","Class2","Class2","Class2","Class2","Class2","Class1","Class1","Class1","Class1","Class1","Class2","Class2","Class2","Class2","Class2","Class3","Class3","Class3","Class3","Class3")
dat <- data.frame(variable, Type, value, Class)
dat<- dat %>% group_by(variable) %>% mutate(upper = max(value))
dat.col <- dat %>% group_by(variable, Type) %>% summarise(upper = max(value)) %>% arrange(desc(upper))
type_filter <- ifelse(dat.col$Type == "Type1", "blue", ifelse(dat.col$Type == "Type2", "purple", "black"))
names(type_filter) <- as.character(dat.col$variable)
p1 <- ggplot(dat, aes(value, reorder(variable, upper)))+
geom_point(aes(color=Class), size = 1, show.legend = TRUE)+
geom_text(aes(label = Type, color = Type), alpha = 0)+
scale_color_manual(values = c("Class3" = "grey40", "Class2" = "red", "Class1" = "chartreuse4",
"Type1" ="blue", "Type2"="purple", "Type3" = "black"),
guide = guide_legend((override.aes = list(alpha = 1))))+
scale_x_log10(breaks = c(1e-6, 1e-5, 1e-4, 1e-3, 1e-2, 1e-1, 1, 1e+1, 1e+2, 1e+3, 1e+4, 1e+5),
labels = trans_format("log10", math_format(10^.x)))+
labs(x="xlab", y = "ylab", face = "bold")+
guides(colour = guide_legend(override.aes = list(size=3)))+
theme_bw(base_family = "serif", base_size = 12)+
theme(legend.position = c(0.20, 0.90),
legend.title = element_blank(),
legend.background = element_blank(),
legend.box.background = element_rect(colour = "black"),
panel.grid.minor=element_blank(),
panel.grid.major.y = element_blank(),
panel.grid.major.x = element_line(linetype = "dotted", color = "black", size = 0.4),
axis.text.y = element_text(face = "bold", color = type_filter),
axis.text.x = element_text(face = "bold"))
print(p1)
При выводе этого кода не удается назначить правильные цветовые шкалы для меток оси y. Как вы можете видеть из изображения ниже, Var1, Var4 и Var63 имеют неправильные цвета. Var18 и Var30 верны, но я думаю, что это совпадение. Это лучшее, что я могу сделать. Даже если я удалю geom_plots и его цветовые шкалы, ось у все равно назначит неправильные цвета.
Как я могу это исправить?