用ggplot2对条形图进行排序
问题描述:
如果我不够清楚,第一次在这里问这么原谅我。用ggplot2对条形图进行排序
到目前为止,我已经看到很多对类似问题的回复,它们解释了如何通过数据框的某个字段对条进行排序;但我一直没能找到如何将它们通过geom_bar的默认统计“数”排序 例如,运行此代码(这显然不是数据帧的领域。):
library(ggplot2)
Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia')
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool')
City.Id <- c(1,2,1,3,1,4,5,3)
df = data.frame(Name,City,City.Id)
a <- ggplot(df,aes(x = City, text=paste("City.Id=",City.Id))) +
geom_bar()
ggplotly(a)
然后我想要显示按高度(= count)排序的结果条。请注意,我必须保留“City.Id”信息以显示在最终的图中。如何才能做到这一点?
答
既然你已经使用ggplot2
,我会建议寻找到别的什么tidyverse
可以提供。即与因素一起工作的forcats
包。
forcats
有一个很好的功能fct_infreq()
这将重新(设置)一个因子的水平是在他们的频率的顺序。如果数据是一个字符矢量,那么它还不是一个因子(如City
在您的数据中),那么它将首先将其作为一个因子,然后将其设置为频率顺序。
试试这个代码:
# Load packages
library(ggplot2)
library(forcats)
# Create data
Name <- c('Juan','Michael','Andrea','Charles','Jonás','Juan','Donata','Flavia')
City <- c('Madrid','New York','Madrid','Liverpool','Madrid','Buenos Aires','Rome','Liverpool')
City.Id <- c(1,2,1,3,1,4,5,3)
df = data.frame(Name,City,City.Id)
# Create plot
a <- ggplot(df, aes(x = fct_infreq(City), text=paste("City.Id=",City.Id))) +
geom_bar()
a
为此,您可以在飞行中,呼叫内ggplot:'ggplot(DF,AES(X =重新排序(市,City.Id,长度)))+ geom_bar()'。 – eipi10
@thisisrg我尝试过使用该行,但是df保持不变 – Javi
我添加了该图。你忘了'长度'? – thisisrg