Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何在ggplot2中重新排序图例?_R_Ggplot2 - Fatal编程技术网

R 如何在ggplot2中重新排序图例?

R 如何在ggplot2中重新排序图例?,r,ggplot2,R,Ggplot2,给定一个包含标签分类列和百分比数据定量列的两列数据框,我可以可靠地在ggplot中生成一个条形图,该条形图使用以下方法按值而不是按字母顺序对条形图进行排序: ggplot(data=df, aes(x=reorder(Label, Percent), y=Percent, fill=Label)) + geom_bar() 这告诉reorder按百分比值而不是文本对条形图进行排序,从而更容易看到更改 然而,我无法让图例匹配:相反,它坚持按原始字母值排序。这导致图例与图表不匹配,令人困惑 我已经

给定一个包含标签分类列和百分比数据定量列的两列数据框,我可以可靠地在ggplot中生成一个条形图,该条形图使用以下方法按值而不是按字母顺序对条形图进行排序:

ggplot(data=df, aes(x=reorder(Label, Percent), y=Percent, fill=Label)) + geom_bar()
这告诉reorder按百分比值而不是文本对条形图进行排序,从而更容易看到更改

然而,我无法让图例匹配:相反,它坚持按原始字母值排序。这导致图例与图表不匹配,令人困惑

我已经查看了StackOverflow和其他地方,但还没有找到有效的修复方法。有什么建议吗

编辑:根据请求,这基本上是数据:

Labels <- c("G", "G", "A", "C", "M", "B", "M", "G", "A","M")
Percent <- c("-0.241","-0.046", "-0.037", "-0.024", "-0.003","0.007","0.01","0.059","0.121", "0.152")

Labels根据您提供的数据,以下内容基本上适用于我,适用于Frank的建议:

Labels <- c("G", "G", "A", "C", "M", "B", "M", "G", "A","M")
Percent <- c("-0.241","-0.046", "-0.037", "-0.024", "-0.003","0.007","0.01","0.059","0.121", "0.152")
df <- data.frame(Labels, Percent)
df$Percent <- as.numeric(as.character(df$Percent))
legend_ord <- levels(with(df, reorder(Labels, Percent)))

library(ggplot2)
p <- ggplot(data=df, aes(x=reorder(Labels, Percent), y = Percent, fill=Labels)) 
p <- p + geom_bar(stat="identity")
p + scale_fill_discrete(breaks=legend_ord)

我发现最简单的方法就是在打印之前对数据重新排序。通过在
aes()
内部指定
reorder(()
),基本上可以为绘图零件制作一个有序的副本,但是
ggplot
在内部很难将其传递给图例制作功能

这应该很好:

df$Label  <- with(df, reorder(Label, Percent))
ggplot(data=df, aes(x=Label, y=Percent, fill=Label)) + geom_bar()

df$Label您能提供一个您的
df
的代表性示例,以便我们重现您的问题吗?您是否尝试过类似于
+scale\u fill\u discrete(breaks=c(“顶部”、“中部”、“底部”)的方法
?提供了数据。至于比例填充离散,这并没有解决问题。任何其他问题,请告诉我。这更容易,因为它同时解决了颜色问题。谢谢!
df$Label  <- with(df, reorder(Label, Percent))
ggplot(data=df, aes(x=Label, y=Percent, fill=Label)) + geom_bar()