R 在组合颜色和形状的ggplot图例中保持我的数据顺序

R 在组合颜色和形状的ggplot图例中保持我的数据顺序,r,ggplot2,legend,R,Ggplot2,Legend,我正在创建一个情节,我需要在一个单一的图例中混合名称、颜色和形状。 似乎图例按类名的字母顺序排列我的数据,生成了与我的类形状和颜色不匹配的结果。。。我需要每个超类A,B,C有唯一的形状,所以我希望A1,A2,A3是三角形,B1,B2是圆。如何强制图例名称遵循与数据中颜色和形状相同的顺序?(我不希望图例中的字母顺序对我的实际应用程序毫无意义) 这里是我的数据和代码: library(ggplot2) x<-c(1,2,3,4,5,6,7,8,9) y<-c(1,1,2,2,2,3,3,

我正在创建一个情节,我需要在一个单一的图例中混合名称、颜色和形状。 似乎图例按类名的字母顺序排列我的数据,生成了与我的类形状和颜色不匹配的结果。。。我需要每个超类A,B,C有唯一的形状,所以我希望A1,A2,A3是三角形,B1,B2是圆。如何强制图例名称遵循与数据中颜色和形状相同的顺序?(我不希望图例中的字母顺序对我的实际应用程序毫无意义)

这里是我的数据和代码:

library(ggplot2)
x<-c(1,2,3,4,5,6,7,8,9)
y<-c(1,1,2,2,2,3,3,3,3)
classNames<-c("B1","B2","A1","A2","A3","C1","C2","C3","C4")
classColors<-c("darkorange","darkorange3","cyan","blue","blue4","green1","green2","green3","green4")
classShapes<-c(1,1,2,2,2,3,3,3,3)

datadf<-data.frame(x,y,classNames,stringsAsFactors = FALSE)

ggplot()+
  geom_point(data=datadf,aes(x=x,y=y,shape=classNames,color=classNames))+
  scale_color_manual(name="My classes",values=classColors)+
  scale_shape_manual(name="My classes",values=classShapes)

图例项目的顺序取决于定义图例的因子变量中的级别顺序

library(ggplot2)
    x<-c(1,2,3,4,5,6,7,8,9)
    y<-c(1,1,2,2,2,3,3,3,3)
    classNames<-c("B1","B2","A1","A2","A3","C1","C2","C3","C4")
    classColors<-c("darkorange","darkorange3","cyan","blue","blue4","green1","green2","green3","green4")
    classShapes<-c(1,1,2,2,2,3,3,3,3)

datadf<-data.frame(x,y,classNames,stringsAsFactors = FALSE)
#defining the levels:
datadf$classNames <- factor(datadf$classNames, levels = classNames)


ggplot()+
  geom_point(data=datadf,aes(x=x,y=y,shape=classNames,color=classNames))+
  scale_color_manual(name="My classes",values = classColors)+
  scale_shape_manual(name="My classes",values = classShapes)

太好了!这是我错过了太多天的把戏。非常感谢。
library(ggplot2)
    x<-c(1,2,3,4,5,6,7,8,9)
    y<-c(1,1,2,2,2,3,3,3,3)
    classNames<-c("B1","B2","A1","A2","A3","C1","C2","C3","C4")
    classColors<-c("darkorange","darkorange3","cyan","blue","blue4","green1","green2","green3","green4")
    classShapes<-c(1,1,2,2,2,3,3,3,3)

datadf<-data.frame(x,y,classNames,stringsAsFactors = FALSE)
#defining the levels:
datadf$classNames <- factor(datadf$classNames, levels = classNames)


ggplot()+
  geom_point(data=datadf,aes(x=x,y=y,shape=classNames,color=classNames))+
  scale_color_manual(name="My classes",values = classColors)+
  scale_shape_manual(name="My classes",values = classShapes)
ggplot()+
  geom_point(data=datadf,aes(x=x,y=y,shape=classNames,color=classNames))+
  scale_color_manual(name="My classes",values = c("A1" = "blue", "A2" = "red", "A3" = "orange", "B1" = "brown", "B2" = "black", "C1" = "grey50", "C2" = "pink", "C3" = "lightblue", "C4" = "green"))+
  scale_shape_manual(name="My classes",values= c("A1" = 1, "A2" = 2, "A3" = 3, "B1" = 4, "B2" = 5, "C1" = 6, "C2" = 7, "C3" = 8, "C4" = 9))