2017-07-07 7 views
1

ここでは、コピー/ペーストをここで再現できるチュートリアルに従っています。私のセットアップでバラグラフでデータの1つの「ビン」が欠落しています

http://rstudio-pubs-static.s3.amazonaws.com/3369_998f8b2d788e4a0384ae565c4280aa47.html

私はこれを実行すると、私は、だから私は私のコードを作る、geom_barためgeom_histを交換エラー

Error: Width` is deprecated. Do you want `geom_bar()`? 

を取得...

ggplot(eventdata, aes(x = eventhour)) + geom_bar(breaks = seq(0, 24), width = 1, colour = "grey") + coord_polar(start = 0) + theme_minimal() + scale_fill_brewer() + ylab("Count") + ggtitle("Events by Time of day") + scale_x_continuous("", limits = c(0, 24), breaks = seq(0, 24), labels = seq(0, 24)) 

しかし、私が得るグラフは非常に異なっています。検査、私が自分でこれを実行しようとしたその深夜から午前1時まで(午後12時00分〇​​〇秒夜12時59分59秒に、event_hour = 0)のデータを「行方不明」

enter image description here

ようですデータセット(下のdput)と同様の奇妙なエラーが発生しました....それは "0"ビンと "23"ビンを1つの大きなビンを与えます。

gplotAll = ggplot(eventdataAll, aes(x=eventdataAll$eventhour)) + 
    geom_histogram(breaks=seq(0,24), colour="purple") + coord_polar(start=0) + 
    theme_minimal() + scale_fill_manual(values="blue") + ylab("Frequency") + 
    ggtitle("All Sources") + scale_x_continuous("", limits=c(0,24), 
    breaks=seq(0,24), labels=seq(0,24)) 

enter image description here

注これは、タイムスタンプのその何百万人として、私のデータの非常に小さなサブセットです。

dput(eventdataAll[1:100,]) 

structure(list(datetime = structure(c(1499433307, 1499428942, 
1499426105, 1499422506, 1499466293, 1499408104, 1499476505, 1499411705, 
1499400905, 1499466368, 1499454358, 1499453483, 1499405930, 1499484602, 
1499483709, 1499480109, 1499408108, 1499445444, 1499439817, 1499427520, 
1499418054, 1499416518, 1499414449, 1499410178, 1499409748, 1499409317, 
1499405867, 1499402279, 1499485071, 1499481544, 1499481527, 1499481459, 
1499481423, 1499481407, 1499477859, 1499475634, 1499474292, 1499474275, 
1499474253, 1499470435, 1499468435, 1499468413, 1499468398, 1499467032, 
1499464834, 1499463580, 1499463425, 1499461391, 1499460152, 1499460150, 
1499459806, 1499459745, 1499459366, 1499458914, 1499458463, 1499458012, 
1499457635, 1499457619, 1499455777, 1499454624, 1499454035, 1499454020, 
1499452801, 1499452695, 1499450434, 1499450414, 1499450404, 1499450403, 
1499450156, 1499446834, 1499446818, 1499446803, 1499445621, 1499444273, 
1499443234, 1499443218, 1499443201, 1499441873, 1499441806, 1499441700, 
1499441096, 1499441095, 1499440418, 1499440417, 1499436056, 1499434899, 
1499432434, 1499431018, 1499428801, 1499427491, 1499425201, 1499423442, 
1499421620, 1499421134, 1499427667, 1499421549, 1499472830, 1499451306, 
1499450792, 1499482802), class = c("POSIXct", "POSIXt"), tzone = ""), 
    eventhour = c(9L, 8L, 7L, 6L, 18L, 2L, 21L, 3L, 0L, 18L, 
    15L, 14L, 1L, 23L, 23L, 22L, 2L, 12L, 11L, 7L, 5L, 4L, 4L, 
    2L, 2L, 2L, 1L, 0L, 23L, 22L, 22L, 22L, 22L, 22L, 21L, 21L, 
    20L, 20L, 20L, 19L, 19L, 19L, 18L, 18L, 18L, 17L, 17L, 17L, 
    16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 16L, 15L, 15L, 
    15L, 15L, 14L, 14L, 14L, 14L, 14L, 14L, 13L, 13L, 13L, 13L, 
    12L, 12L, 12L, 12L, 12L, 11L, 11L, 11L, 11L, 11L, 11L, 11L, 
    10L, 9L, 9L, 8L, 8L, 7L, 7L, 6L, 6L, 5L, 7L, 5L, 20L, 14L, 
    14L, 23L)), .Names = c("datetime", "eventhour"), row.names = c(NA, 
100L), class = "data.frame") 

上の任意の情報

(1)なぜ最初、コピー/貼り付けの例では、グラフの "0" のデータを提供しない

(2)なぜ私の例は "23"と "0"のビンを組み合わせますか

大変ありがとうございます。

EDIT - 次のコードは問題を修正しましたが、警告を出しました。私は警告が問題だとは思わないが、誰かがこれを解釈できるかどうか不思議だ。私は元の問題は、Rが私が期待したように(val1、val2)ではなく、val1、val2ではないと解釈していると考えています。 23.

修正を介してすべての値が0になりました包括的な:

gplotAll = ggplot(eventdataAll, aes(x=eventdataAll$eventhour)) + 
    geom_histogram(breaks=seq(-1,24), colour="purple") + coord_polar(start=0) + 
    theme_minimal() + scale_fill_manual(values="purple") + ylab("Frequency") + 
    ggtitle("All Sources") + scale_x_continuous("", limits=c(-1,23), 
    breaks=seq(-1,23), labels=seq(0,2)) 

警告:

Removed 1 rows containing missing values (geom_bar). 
+0

あなたが掲示修正が私に与える:休憩とラベルが同じlength' – Mako212

+0

を持っている必要があります警告がggplotが実際にプロットから(23時間で、おそらくデータ)のデータを削除し、そうではないすべてのことを意味しデータが含まれています。説明については、[この回答](https://stackoverflow.com/a/32506068/496488)を参照してください。 – eipi10

答えて

1

あなたのデータはeventhourが数値であるという意味で連続しているが、同様eventhour振る舞います順序付けされたカテゴリ変数。eventhour値は、1日の整数時間です。したがって、geom_barまたはgeom_histogramのいずれかでプロットを行うことができます。下の例ではgeom_bar(カテゴリデータの場合)を使用し、最後にgeom_histogram(連続データの場合)というバージョンを表示します。

geom_barの問題は、バーが整数時間単位で配置されていますが、1単位のデフォルト幅があるためです。これは、幅が有限であるため、ゼロ(真夜中)のバーがゼロよりも0.5単位だけ下に広がることを意味します。x軸の制限を0に設定すると、scale_x_continuouslimitsの範囲外のデータを除外するため、ゼロのバーは除外されます。ただし、制限を-0.5に設定すると、極座標はもはや0〜24時間のクロックではなくなります。

以下に複数の例を示しますが、それらはすべて同様のプロット要素を持っていますので、これらの共通要素を再利用できるオブジェクトに保存しましょう。

my_plot = list(coord_polar(start=0), 
       geom_bar(colour="grey"), 
       theme_minimal(), 
       scale_fill_brewer(), 
       ylab("Count")) 

今度は、(我々はmy_plot[-1]を行うことによってmy_plotcoord_polarなステートメントを除外)coord_polarなしgeom_barと何が起こるか見てみましょう。深度バー(eventhour = 0)のバーが、バーの幅がxレンジ(最初のプロット)の外側にある場合は除外されますが、エッジを-0.5(下の2番目のプロット)バーの。

ggplot(eventdata, aes(x = eventhour)) + 
    my_plot[-1] + 
    scale_x_continuous(limits = c(0,24), breaks=0:23) + 
    ggtitle("x-limits: c(0,24)") 

ggplot(eventdata, aes(x = eventhour)) + 
    my_plot[-1] + 
    scale_x_continuous(limits = c(-0.5,24), breaks=0:23) + 
    ggtitle("x-limits: c(-0.5,24)") 

enter image description here

今度は、上記の2番目のプロットにcoord_polarを追加してみましょう。コードは下にあり、プロットは下の左にあります。 0が時計回りに回転し、0の前に余分な30分ウェッジがあることに注意してください。

これらの問題を修正するために、coord_polarステートメントを変更してプロットを反時計回りに7.5度回転させます最大の時値が23であるため、これはデータを削除しません。

また、マイナーグリッド線を削除して23.5時間に表示される不要なグリッド線を取り除く。半時間では実際には小さなグリッド線がありますが、これは2回プロットされているため(-0.5と23.5時間の両方を表すため)、他のものよりも顕著です。ここでは小さなグリッドラインは必要ありませんので、完全に削除してください。

このプロットのコードは、下の2番目のggplotブロックです。プロットは右側にあります。

ggplot(eventdata, aes(x = eventhour)) + 
    my_plot + 
    scale_x_continuous(limits = c(-0.5,24), breaks=0:23) + 
    ggtitle("x-limits: c(-0.5,24)") 

ggplot(eventdata, aes(x = eventhour)) + 
    my_plot[-1] + 
    scale_x_continuous(limits = c(-0.5,23.5), breaks=0:23) + 
    ggtitle("x-limits: c(-0.5,23.5)") + 
    coord_polar(start=-48/360) + 
    theme(panel.grid.minor=element_blank()) 

enter image description here

したがって、最終的なプロットのコードは次のとおり

ggplot(eventdata, aes(x=eventhour)) + 
    geom_bar(colour="grey") + 
    theme_minimal() + 
    scale_fill_brewer() + 
    ylab("Count") + 
    coord_polar(start=-48/360) + 
    scale_x_continuous(limits=c(-0.5,23.5), breaks=0:23) + 
    theme(panel.grid.minor=element_blank()) 

geom_histogramと同等のプロットは以下です。 binwidth=1は、各バーが1時間幅であることを意味します。 center=0は、各小節が整数の中央に配置されるようにします(0の代わりに任意の整数を選択できます)。いくつかのケースでは、ビンが左右に閉じられているかどうかも重要です(たとえば、center=0.5と設定するとここで問題になります)。引数はclosedで設定できます。 closed="right"またはclosed="left"。エラー `エラー

ggplot(eventdata, aes(x=eventhour)) + 
    geom_histogram(colour="grey", center=0, binwidth=1) + 
    theme_minimal() + 
    scale_fill_brewer() + 
    ylab("Count") + 
    coord_polar(start=-48/360) + 
    scale_x_continuous(limits=c(-0.5,23.5), breaks=0:23) + 
    theme(panel.grid.minor=element_blank()) 
関連する問題