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