Jav*_*avi 2 r bar-chart ggplot2 geom-bar plotly
如果我不够清楚的话,第一次问这里如此原谅我.
到目前为止,我已经看到许多类似问题的回复,这些问题解释了如何通过数据框的某个字段对条形图进行排序; 但我一直无法找到如何根据geom_bar的默认统计"count"对它们进行排序(这显然不是数据框的字段.)例如,我运行以下代码:
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)
然后我想通过它们的高度(=计数)可视化生成的条形图.请注意,我必须保留"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
一个可以使用reorder:
df$City <- reorder(df$City,df$City.Id,length)
然后用问题中的代码绘图。
| 归档时间: | 
 | 
| 查看次数: | 5649 次 | 
| 最近记录: |