R 如何使用ggplot对前X个类别进行分组和显示?

R 如何使用ggplot对前X个类别进行分组和显示?,r,ggplot2,R,Ggplot2,我尝试使用ggplot按公司绘制生产数据,并使用点的颜色指定年份。下图显示了基于样本数据的示例: 然而,通常情况下,我的真实数据有50-60个不同的公司,这使得Y轴上的公司名称被巧妙地分组,而不是非常令人愉快 哪种最简单的方法可以只显示按2011年数量排列的前5名公司信息的数据,然后显示其他公司的汇总数据并显示为其他公司 下面是一些示例数据和我用来创建示例图表的代码: # create some sample data c=c("AAA","BBB","CCC","DDD","EEE","FF

我尝试使用ggplot按公司绘制生产数据,并使用点的颜色指定年份。下图显示了基于样本数据的示例:

然而,通常情况下,我的真实数据有50-60个不同的公司,这使得Y轴上的公司名称被巧妙地分组,而不是非常令人愉快

哪种最简单的方法可以只显示按2011年数量排列的前5名公司信息的数据,然后显示其他公司的汇总数据并显示为其他公司

下面是一些示例数据和我用来创建示例图表的代码:

# create some sample data
c=c("AAA","BBB","CCC","DDD","EEE","FFF","GGG","HHH","III","JJJ")

q=c(1,2,3,4,5,6,7,8,9,10)
y=c(2010)
df1=data.frame(Company=c, Quantity=q, Year=y)

q=c(3,4,7,8,5,14,7,13,2,1)
y=c(2011)
df2=data.frame(Company=c, Quantity=q, Year=y)

df=rbind(df1, df2)

# create plot
p=ggplot(data=df,aes(Quantity,Company))+
  geom_point(aes(color=factor(Year)),size=4)
p
我开始采用暴力手段,但我认为可能有一种简单而优雅的方法可以做到这一点,我应该学习。非常感谢您提供的任何帮助。

这方面如何:

    df2011 <- subset (df, Year == 2011)
    companies <- df2011$Company [order (df2011$Quantity, decreasing = TRUE)]
    ggplot (data = subset (df, Company %in% companies [1 : 5]), 
            aes (Quantity, Company)) +
            geom_point (aes (color = factor (Year)), size = 4)

顺便说一句:为了让代码被称为优雅的,多花一些空间,它们不会那么昂贵…

看看这是不是你想要的。它需要您的df数据帧,以及@cbeleites已经提出的一些想法。这些步骤是:

1.选择2011年数据,按数量从高到低排序

2.将df拆分为两位:dftop包含前5位的数据;和dfother,其中包含使用plyr包中ddply的其他公司的聚合数据

3.将两个数据帧放在一起,以生成新的数据帧

4.设置绘制公司级别的顺序:从上到下是从最高到最低,然后是其他。订单一部分由公司提供,另一部分由其他公司提供

5.像以前一样绘图

library(ggplot2)
library(plyr)

# Step 1
df2011 <- subset (df, Year == 2011)
companies <- df2011$Company [order (df2011$Quantity, decreasing = TRUE)]

# Step 2
dftop = subset(df, Company %in% companies [1:5])
dftop$Company = droplevels(dftop$Company)

dfother = ddply(subset(df, !(Company %in% companies [1:5])), .(Year), summarise, Quantity = sum(Quantity))
dfother$Company = "Other"

# Step 3
dfnew = rbind(dftop, dfother)

# Step 4
dfnew$Company = factor(dfnew$Company, levels = c("Other", rev(as.character(companies)[1:5])))
levels(dfnew$Company)    # Check that the levels are in the correct order

# Step 5
p = ggplot (data = dfnew, aes (Quantity, Company)) +
        geom_point (aes (color = factor (Year)), size = 4)
p
该代码生成:


很好,但我不希望只是放弃小公司,而是将它们合并,并将它们作为其他公司展示。对不起,我忽略了问题的这一部分。但不管怎样,我不清楚你到底想把它们加在一起?箱线图?绘制除一行以外的所有点?平均的中位数?基本上,只需创建一个名为Other的新公司名称,将不在前五名的公司聚合在一起。因此,沿着x轴,总共将有6家公司,其中包括单独上市的前5家公司和其他所有非前5家公司的总和。我想基本上只是做一些像。。。。df2=子TDF,公司%!在%公司[1:5]中,使用!公司%以%公司[1:5]为单位,合计df2,按=列出df2$年,sumgreat..非常感谢。最后一个问题是,如何沿X轴重新排列公司名称,以便根据数量按降序排序?