4

ggplot を使用して会社ごとの生産データをプロットし、ポイントの色を使用して年を指定しようとしています。次のグラフは、サンプル データに基づく例を示しています。 ここに画像の説明を入力

しかし、多くの場合、実際のデータには 50 ~ 60 の異なる会社が含まれているため、Y 軸の会社名がぎっしりとグループ化されており、あまり慎重に満足できるものではありません。

上位 5 社の情報 (2011 年数量でランク付け) のみのデータを表示し、残りを集計して「その他」として表示する最も簡単な方法は何ですか?

以下は、サンプル チャートを作成するために使用したサンプル データとコードです。

# 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

私はブルートフォースアプローチの道を歩み始めましたが、おそらくこれを行うためのシンプルでエレガントな方法があり、それを学ぶ必要があると思いました. どんな援助でも大歓迎です。

4

2 に答える 2

6

これはどうですか:

    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)

ところで:コードがエレガントであると呼ばれるためには、さらにいくつかのスペースを費やしてください。それらはそれほど高価ではありません...

于 2012-04-19T19:42:28.747 に答える
3

これがあなたが望むものかどうかを確認してください。データフレームと、@ cbeleitesdfによって既に提案されているいくつかのアイデアが必要です。手順は次のとおりです。

1. 2011 年のデータを選択し、企業を数量の多いものから順に並べます。

2.上位 5 つのデータを含むdf2 つのビットに分割します。dftopおよびdfother、他の会社の集計データが含まれています ( ddply()plyr パッケージから使用)。

3. 2 つのデータフレームをまとめてdfnew.

4.会社のレベルをプロットする順序を設定します。上から下、最高から最低、次に「その他」です。順序の一部はcompaniesに加えて「その他」です。

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

コードは以下を生成します。

ここに画像の説明を入力

于 2012-04-20T05:40:26.090 に答える