r - 如何用前n个级别(按某种度量标准)加上[other]来替换因子级别?

标签 r ggplot2 color-scheme

对于要在图表中显色的级别数要多的因子,我想用“其他”替换不在“前10名”中的任何级别。

替代问题:如何将因子水平降低到rcolorbrewer可以绘制为单独颜色的数量?

例如,如果我想从棒球数据中绘制每十年的本垒打次数:

require(ggplot2)
qplot(data=baseball,10*year%/%10,hr,
  stat="identity",geom="bar")

也许我想看看哪些团队对此做出了贡献:
qplot(data=baseball,10*year%/%10,hr,
  fill=team,
  stat="identity",geom="bar")

这会创建过多的颜色级别!颜色是如此相似,您无法区分它们,并且有太多它们不适合显示在屏幕上。

我真的很想看到排名靠前的X(7)支球队(按本垒打总数计算),然后将其余的全部归为一个类别/颜色(称为“其他”)。

假设我们有一个称为hotfactor的函数,该函数知道如何执行此操作:
hotfactor(afactor,orderby,count)={ ??? }

qplot(data=baseball,10*year%/%10,hr,
  fill=hotfactor(factor(team),hr,n=7),
  stat="identity",geom="bar") + 
  scale_fill_brewer("team","Dark2")

那我可以用什么作为“hotfactor”呢?

最佳答案

因此,经过几次迭代并搜索了网络之后,我创建了这个简短的简短内容。

hotfactor= function(fac,by,n=10,o="other") {
   levels(fac)[rank(-xtabs(by~fac))[levels(fac)]>n] <- o
   fac
}

它非常适合汇总数据,您可以使用它来访问出色的rcolorbrewer配色方案(每种配色方案都具有有限数量的精心选择的颜色)。

使用注意事项:

fac应该是一个因素,并且在没有空的因素水平的情况下效果最佳。您可能要先运行droplevels(as.factor(mydata))

它不对因子水平进行排序。为了在条形图中获得最佳结果,应在输出因子上运行以下命令。
x <- hotfactor(f,val)
x <- reorder(x,-val,sum)

关于r - 如何用前n个级别(按某种度量标准)加上[other]来替换因子级别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6673574/

相关文章:

eclipse - 如何在 Eclipse CDT 的搜索 View 中更改引用的突出显示颜色?

vim - 终端、zsh 和 vim 中的配色方案交互

r - 带有许多变量的公式中的星号 : how to limit order of interactions?

r - 如何将刻度标签移近轴?

roxygen2 没有记录新项目

r - ggplot : Fill small area under normal curve: remove "joining" area

r - 如何在图例键周围有选择地添加框

visual-studio - 是否可以在 Visual Studio 9 中为特定单词设置颜色?

r - 在 R 中将值大于 n 的行汇总为 1

sql - SQL Server : Output data frame into a table 中的 R