r ggplot更改图例顺序以匹配数据的最终顺序

r ggplot更改图例顺序以匹配数据的最终顺序,r,ggplot2,legend-properties,R,Ggplot2,Legend Properties,我有一个dataframe,它有一组制造商,并为这些制造商收集数据。制造商列表和/或属性数据可能会更改,具体取决于运行。 我在ggplot中将其显示为折线图,但我希望图例顺序与最后一年数据的“向上/向下”顺序相匹配。所以对于这个图表: 我想看看图例顺序(和颜色)是Yodyne(紫色)、Widget(绿色)、Wonka(蓝色)和Acme(红色)。 我不能(或我认为我不能)使用scale_color_手册,因为从一个模型运行到下一个模型运行的数据可能不同,最终订单(2032年)可能不同和/或制造商

我有一个dataframe,它有一组制造商,并为这些制造商收集数据。制造商列表和/或属性数据可能会更改,具体取决于运行。 我在ggplot中将其显示为折线图,但我希望图例顺序与最后一年数据的“向上/向下”顺序相匹配。所以对于这个图表:

我想看看图例顺序(和颜色)是Yodyne(紫色)、Widget(绿色)、Wonka(蓝色)和Acme(红色)。 我不能(或我认为我不能)使用scale_color_手册,因为从一个模型运行到下一个模型运行的数据可能不同,最终订单(2032年)可能不同和/或制造商列表可能不同

做图表的代码是(最后一部分,pz,只是为了简化x轴显示):


px您是否尝试过根据去年设置制造商的级别?例如,可以通过以下方式添加设置了标高的列:

# order Manufacturer by AverageCost in the last year
colours = bym[with(bym[bym$Model.Year == 2032,], order(-AverageCost)),]$Manufacturer
# add factor with levels ordered by colours
bym$Colour = factor(bym$Manufacturer, levels=as.character(colours))
然后使用
颜色
来提升你的
颜色
美感


编辑:也就是说,如果您想坚持以R为基数。使用
dplyr::mutate
的答案更容易使用。

您可以使用
dplyr::mutate
函数和
factor
函数来设置图例对象的顺序。要按所需顺序设置颜色,只需按所需顺序创建一个带有所需颜色的向量,并将其传递到
scale\u color\u manual
。我已经在下面的例子中这样做了。我的看起来和你的有点不同,因为我去掉了中间作业

bym <- data.frame(
  Model.Year = rep(seq(2016, 2030, 1), 4),
  AverageCost = rnorm(60),
  Manufacturer = rep(c("Yoyodyne", "Widget", "Wonka", "Acme"), each = 15)
)

my_colors <- c("purple", "green",  "blue", "red")

bym %>%
  mutate(Manufacturer = factor(Manufacturer, 
                               levels = c("Yoyodyne", "Widget", "Wonka",     "Acme"))) %>%
  ggplot(aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) +
  ggtitle("MyChart") + 
  labs(x="Year", y="Foo") + 
  geom_line(size=0.5) + 
  geom_point()+ 
  scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) +
  scale_color_manual(values = my_colors)
bym%
ggplot(aes(x=车型年份,y=平均成本,颜色=制造商))+
ggtitle(“MyChart”)+
实验室(x=“年”,y=“Foo”)+
几何尺寸线(尺寸=0.5)+
几何点()
比例x连续(中断=c(最小值(bym$车型年),最大值(bym$车型年)))+
缩放颜色手册(值=我的颜色)
bym <- data.frame(
  Model.Year = rep(seq(2016, 2030, 1), 4),
  AverageCost = rnorm(60),
  Manufacturer = rep(c("Yoyodyne", "Widget", "Wonka", "Acme"), each = 15)
)

my_colors <- c("purple", "green",  "blue", "red")

bym %>%
  mutate(Manufacturer = factor(Manufacturer, 
                               levels = c("Yoyodyne", "Widget", "Wonka",     "Acme"))) %>%
  ggplot(aes(x=Model.Year, y=AverageCost, colour=Manufacturer)) +
  ggtitle("MyChart") + 
  labs(x="Year", y="Foo") + 
  geom_line(size=0.5) + 
  geom_point()+ 
  scale_x_continuous(breaks=c(min(bym$Model.Year),max(bym$Model.Year))) +
  scale_color_manual(values = my_colors)