Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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 我如何用前n个级别(按某些指标)加上[其他]替换因子级别?_R_Ggplot2_Color Scheme - Fatal编程技术网

R 我如何用前n个级别(按某些指标)加上[其他]替换因子级别?

R 我如何用前n个级别(按某些指标)加上[其他]替换因子级别?,r,ggplot2,color-scheme,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,

对于一个在图形中要着色的级别超过合理数量的因子,我想用“其他”替换任何不在“前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")


那么,我可以用什么来制作“热因子”?

因此,在经过多次迭代和搜索web之后,我创建了这个漂亮的短因子

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

抱歉,无法帮助编辑。它足够紧凑,因为它是。。。我加了几个空格。哈!我下班已经晚了,所以我没有时间考虑整洁。谢谢。我回答我自己的问题似乎有些奇怪,但这是一个很好的方式,当我忘记它或转移工作时,我可以用谷歌搜索答案。我认为这实际上是完全允许/预期的。有关用法示例,请参见问题
x <- hotfactor(f,val)
x <- reorder(x,-val,sum)