2017-02-02 23 views
1

ファクタを使用してグラフィックの表示を制御したいと思います。ggplot2を使用したRの順序付け、ラベリング、ファセットコントロール

私は自分の所在地を得るために多くの情報源に相談しましたが、私が生産しているグラフの最終的な問題を解決するための情報をまとめてまとめることはできません。

Iは、具体的には達成したい:ファセット

  • 内のハイからローへの値の

    1. 受注

    サンプルデータとコードは以下の通りである因子の凡例のタイトルのラベルを変更します:


    ##### !!!!! graphing with factors and facets 
    
    
    
    library(ggplot2) 
    
    
    
    lm <- read.table(header=TRUE, text=" 
            country| medal.type | count | member 
           South Korea |  gold |13 | 0 
             Italy |  gold |8 | 1 
             France |  gold |11 | 1 
            Australia |  gold |7 | 0 
             Japan |  gold |7 | 0 
            Germany |  gold |11 | 1 
        Great Britain & N. Ireland |  gold |29 | 1 
          Russian Federation |  gold |24 | 0 
             China |  gold |38 | 0 
           United States |  gold |46 | 0 
           South Korea | silver |8 | 0 
             Italy | silver |9 | 1 
             France | silver |11 | 1 
            Australia | silver |16 | 0 
             Japan | silver |14 | 0 
            Germany | silver |19 | 1 
        Great Britain & N. Ireland | silver |17 | 1 
          Russian Federation | silver |26 | 0 
             China | silver |27 | 0 
           United States | silver |29 | 0 
           South Korea | bronze |7 | 0 
             Italy | bronze |11 | 1 
             France | bronze |12 | 1 
            Australia | bronze |12 | 0 
             Japan | bronze |17 | 0 
            Germany | bronze |14 | 1 
        Great Britain & N. Ireland | bronze |19 | 1 
          Russian Federation | bronze |32 | 0 
             China | bronze |23 | 0 
           United States | bronze |29 | 0 
           XXXXXXX  | bronze |12 | 0 
    ", sep="|" ) 
    
    
    
    lm$medal.type_f <- factor(lm$medal.type, labels= c("gold","silver","bronze")) 
    lm$country_l <- with(lm, paste(country, medal.type, sep = "_")) 
    
    lm$member_f <- factor(lm$member , labels = c("Not EU" , "EU")) 
    
    # Make every country unique 
    
    lm$country_l <- with(lm, paste(country, medal.type, sep = "_")) 
    
    
    
    
    
    
    
    
    
    dev.new(width=12, height=8) 
    
    p <- ggplot(lm, aes(x=count , y=country , group=member_f)) 
    
    
    p + geom_point(size=3, aes(shape=factor(member_f))) + 
    scale_shape_manual(values=c(1,19)) + 
    scale_size_manual(values=c(3,3)) + 
    scale_fill_manual(name="European Union\n Membership") + 
    facet_grid(medal.type_f ~., scales="free") + geom_vline(xintercept=mean(lm$count), color="red") + 
    xlab("Count of Medals") + 
    scale_y_discrete("Country", breaks = lm$country, label = lm$country) 
    
    
    
    ##### !!!!! end of program 
    

    私はファセット内のメダル数を最高から最低まで注文し、凡例のタイトルを変更したいと思います。私はある国がある要因を使ってEUの一員であるかどうかを示したいので、そのように示すために異なる記号を使用しました。 scale_fill_manualを使用している私の試みは失敗しました。

    私のために作成されるグラフは次のとおりです。

    medal count by country and medal type

    私が相談してきた参照の一部は以下の通りです:

    Stack Overflow #1

    Stack Overflow #2

    R-bloggers

    Cookbook for R

  • +1

    問題がありますか? –

    +0

    1つのグラフではなく、別々に各パネルをプロットしない限り、各ファセットに異なる順序のX軸カテゴリを設定することはできません。次に、各パネルに対して別々の注文を作成することができます。しかし、もしそうすれば、3つのパネルは、各パネルの国の順序が異なるため、並べて配置すると分かりにくいでしょう。もう一つの選択肢は、全メダル数または金メダル数で国を注文することです。 – eipi10

    +0

    @ eipi10これは私が上記に含まれていない別の参考資料です:http://stackoverflow.com/questions/12064007/factor-order-within-faceted-dotplot-using-ggplot2 –

    答えて

    1

    あなたのコメントにあなたが必要とするリンクは含まれています。 y軸の順序を変更し、countryではなく、country_lを使用してブレークを設定する必要があります。まず、あなたのコードには、青銅と銀のグループがスワップされるバグがあります(銀メダルのデータはブロンズと呼ばれ、その逆もあります)。 あなたはこのようなmedal.type_f列を作成することができます

    lm$medal.type_f <- factor(lm$medal.type, levels(lm$medal.type)[c(1, 3, 2)]) 
    

    をしてから、プロット作成:

    p <- ggplot(lm, aes(x = count, y = reorder(country_l, count), group = member_f)) 
    
    p + geom_point(size=3, aes(shape=factor(member_f))) + 
        scale_shape_manual(values=c(1,19)) + 
        scale_size_manual(values=c(3,3)) + 
        scale_fill_manual(name="European Union\n Membership") + 
        facet_grid(medal.type_f ~., scales="free") + 
        geom_vline(xintercept=mean(lm$count), color="red") + 
        xlab("Count of Medals") + 
        scale_y_discrete("Country", breaks = lm$country_l, label = lm$country) + 
        # To rename the legend: 
        labs(shape = "EU membership") 
    

    enter image description here

    +0

    あなたは、ロックスターです。 –

    関連する問題