2017-09-17 15 views
5

が、私は少し奇妙な方法でドットプロットを使用しています知っている同じ座標でポイントを着色されていない伝説とマニュアルグラデーションを適用するために、私は持っているどのようにそれは、グラフィックIを生成します欲しいです;各プレミアリーグサッカークラブの各ポジションでのプレーヤー数を示しています。各ドットには1人のプレーヤーが表示されています。私は複数のカテゴリーを持っています - プレーヤーが選手か青少年かを示しています。これらは別々にプロットされていて、2つ目は重なり合わないようにナッジされています。ggplot2 - ドットプロットは

私は、各プレイヤーが果たしてきた何分に基づいてドットを遮光され、そこに情報の別の層を追加します。私はこのデータを自分のデータフレームに持っています。

またカラーコードドット完全に、データは、それがグレー離れる場合には、「グループ化」されている場合を除き。

screenshot of my plot

私は良いRの質問を生産する上での指針を読みました。私は巨大ではない問題を表示するためにデータをカットし、このポイントやグラフのタイトルなどのデータを操作するなど、すべてのコード行を削除しました。

これは20人のサンプルで、きれいに着色されたドットと、2組の灰色の無色のドットとを含む。私の実際のコードでは

library(ggplot2) 
ggplot()+ 
geom_dotplot(data=u21, aes(x=team, y=pos, fill=mins), binaxis='y', stackdir="center", stackratio = 1, dotsize = 0.1, binwidth=0.75, position=position_nudge(y=-0.1)) + 
scale_fill_gradient(low="pink",high='red') 

私は再びggplotラインを実行しますが、異なる色のグラデーションで異なるデータフレームを、呼び出し、および異なる:ここに

structure(list(team = structure(c(2L, 3L, 4L, 4L, 5L, 6L, 8L, 9L, 11L, 12L, 5L, 6L, 7L, 10L, 12L, 12L, 1L, 4L, 5L, 7L), .Label = c("AFC Bournemouth", "Arsenal", "Brighton & Hove Albion", "Chelsea", "Crystal Palace", "Everton", "Huddersfield Town", "Leicester City", "Liverpool", "Swansea City", "Tottenham Hotspur", "West Bromwich Albion"), class = "factor"), 
role = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "U21", class = "factor"), 
name = structure(c(10L, 2L, 1L, 15L, 13L, 19L, 4L, 7L, 20L, 
8L, 17L, 9L, 18L, 11L, 3L, 6L, 14L, 5L, 12L, 16L), .Label = c("Boga", 
"Brown", "Burke", "Chilwell", "Christensen", "Field", "Grujic", 
"Harper", "Holgate", "Iwobi", "Junior Luz Sanches", "Loftus Cheek", 
"Lumeka", "Mousset", "Musonda", "Palmer", "Riedwald", "Sabiri", 
"Vlasic", "Walker-Peters"), class = "factor"), pos = structure(c(6L, 
7L, 6L, 6L, 6L, 5L, 2L, 4L, 3L, 6L, 1L, 1L, 5L, 4L, 6L, 4L, 
7L, 1L, 4L, 5L), .Label = c("2. CB", "3. LB", "3. RB", "4. CM", 
"5. AM", "5. WM", "6. CF"), class = "factor"), mins = c(11, 
24, 18, 1, 25, 10, 90, 6, 90, 20, 99, 180, 97, 127, 35, 156, 
32, 162, 258, 124)), .Names = c("team", "role", "name", "pos", "mins"), row.names = 471:490, class = "data.frame") 

は、私が使用していたコードですドットが重ならないようにしてください。

答えて

3

基本的に何が起こってはggplot着色機構を破壊された2分の同じxの値、y座標を、受信しているので、これらの「グループ化」ドットはNAの値として扱われているです。たとえば、「team = Chelsea」と「pos = 5. WM」の交差点には、18と1の2つの分があります。次のコード/グラフは、デフォルト値のグレーから黄色にNA値を変更して、

ggplot()+ 
    geom_dotplot(data=df, aes(x=team, y=pos, fill=mins), 
       binaxis='y', stackdir="center", 
       stackratio = 1, dotsize = 0.2, binwidth=0.75, 
       position=position_nudge(y=-0.1)) + 
    scale_fill_gradient(low="pink",high='red',na.value="yellow") + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

出力:

enter image description here

これはgeom_dotplotの創造的なテストでした。あなたがその方法で求めていることをすることができないわけではありませんが、そのアプローチで望む効果を得るには過度に複雑になります。代わりに、このタイプのデータのプロットを処理するために設計されたgeom_jitterにもっと幸運を祈るかもしれません。

ggplot(df)+ 
    geom_jitter(aes(x=team, y=pos, col=mins),width = 0.2, height = 0) + 
    scale_color_gradient(low="pink",high='red',na.value="yellow") + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

出力:

enter image description here

EDIT:

それでもジッタを避け、ドットプロットとの複雑なバージョンをしたい場合は、ここではそれもあります:

cols <- colorRampPalette(c("pink","red")) 

df$cols <- cols(
    max(df$mins,na.rm=T))[findInterval(df$mins,sort(1:max(df$mins,na.rm=T)))] 

ggplot()+ 
    geom_dotplot(data=df, aes(x=team, y=pos, col=mins, fill=cols), 
       binaxis='y',stackdir="centerwhole",stackgroups=TRUE, 
       binpositions="all",stackratio=1,dotsize=0.2,binwidth=0.75, 
       position=position_nudge(y=-0.1)) + 
    scale_color_gradient(low="pink",high='red',na.value="yellow") + 
    scale_fill_identity() + 
    theme(axis.text.x = element_text(angle=90, vjust=0.2, hjust=1, size=8)) 

出力:第三のグラフのコードで何が起こっているとあまり馴染みのものについて

enter image description here

:ステップ1 colorRampPaletteと傾斜範囲を記憶することです。ステップ2では、行のdf $ mins値に従って各行に慎重に16進数の色値を割り当てます。ステップ3では、凡例が表示されるようにcolorとfillの両方の引数を使用してデータをプロットしますが、灰色(または黄色)のグループ化されたドットはscale_fill_identity()を呼び出して設定した正しい手動グラデーションカラーでオーバーレイされます。この構成では、適切な色と正しい凡例が得られます。

+0

こんにちは、それはそのサンプルで動作しますが、完全なデータフレーム(約460ポイント)で試してみると、ジッタのランダムな性質のために、 4より多くのスペースを増やすので、ビジュアルは「一目で」自然を失います。しかし、色分けエラーは問題解決のための素晴らしいアイデアです。おかげで@RyanRunge –

+0

@ChrisBaker - 十分に公正。私はあなたの特定のユースケースを助けるために複雑なオプションを追加することに決めました。上記の編集を参照してください。 – www

+0

@ChrisBaker - あなたの質問に答えた場合は、この解決策の横のチェックマークをクリックしてください。それはコミュニティがそれが解決されたことを知るのに役立ち、同じ質問をした他の人が彼らの答えをより速く見つけるのを助ける。 – www