2017-03-19 9 views
0

編集:データを追加しました。ggplotで凡例を定義して表示する

前のStataユーザーとコーディング初心者の私は楽しいです& Rへの移行に問題があります。スクリーンショットに表示されたデータフレームの変数のいくつかに基づいてラインプロットを作成しようとしています。私は彼らが欲しいと思うような形になっていますが、それぞれの線種にラベルを付ける簡単な伝説を追加することはまったくうまくいきません。私も伝説を手に入れることができません!私はかなりここでggplotで使用される抽象化のレベルを取得していないと確信していますが、私は完全に出版物の複数のグラフを介して書式を取得するために手動でこのものを指定したいと確信しています。

私の全体的なアプローチが間違っているかどうかは是非教えてください。ラインが2つある場合は、これをクリアして抽象度を上げるのではなく、非常に幸せなキャンピングカーになります。

(私は他の場所でスタックオーバーフローとで同様の質問から多くのソリューションを試してみましたが、私はちょうどそれが届かない。)

codingsuccess <- ggplot(data = ystats, aes(x=iyear)) + 
    geom_line(aes(y = pnattacks), linetype = "dotted", size = 1) + 
    geom_line(aes(y = ptra), linetype = "longdash", size = 1) + 
    geom_line(aes(y = pdom), linetype = "F1", size = 1) + 
    geom_line(aes(y = punc), linetype = "solid", size = 1) + 
    labs(title = "Coding Success", x = "Year", y = "Percentage") + 
    theme_bw() 

codingsuccess # View plot 

データ

structure(list(pnattacks = c(96.6954022988506, 94.229722373435, 
95.4063604240283, 93.9429464634623, 94.5975744211687, 96.4044943820225, 
96.3838166845686, 93.6634494334872, 92.4137931034483, 95.6087824351297, 
89.628349178911, 93.6086529006883, 93.4337997847148, 95.7178841309824, 
93.8461538461539, 96.2779156327543, 95.0248756218905, 96.039603960396, 
96.7592592592593, 96.1538461538462, 96.219035202086, 95.4599761051374, 
86.3636363636364, 94.058229352347, 95.1696377228292, 94.8897256589564, 
93.6298076923077, 91.9762258543834, 87.6906318082789, 89.1412056151941 
), ptra = c(91.6216216216216, 94.2408376963351, 94.6564885496183, 
90.9090909090909, 87.7952755905512, 94.5887445887446, 97.5450081833061, 
96.7051070840198, NaN, 97.6311336717428, 93.2668329177057, 95.9090909090909, 
93.3920704845815, 99.4413407821229, 97.0588235294118, 98.7421383647799, 
95.4022988505747, 98.4455958549223, 95.852534562212, 95.4022988505747, 
94.9074074074074, 94.6341463414634, 93.1578947368421, 94.5205479452055, 
94.0639269406393, 88.5826771653543, 91.554054054054, 89.3041237113402, 
85.7374392220421, 91.2866449511401), pdom = c(98.116539140671, 
97.3818181818182, 98.1110475100172, 97.2609561752988, 97.7892756349953, 
98.0813953488372, 97.5047080979284, 95.0148367952522, NaN, 96.2833914053426, 
94.4610778443114, 94.6575342465753, 94.4532488114105, 99.5024875621891, 
92.375366568915, 96.4285714285714, 98.0952380952381, 96.9072164948454, 
97.2027972027972, 98.1060606060606, 97.9779411764706, 98.3660130718954, 
96.9072164948454, 95.5916473317865, 98.2203969883641, 97.3514211886305, 
95.5904334828102, 94.8237394020527, 88.2456915598763, 88.370142577579 
), punc = c(15.8536585365854, 23.1884057971014, 41.5730337078652, 
0.641025641025641, 25, 20.7920792079208, 19.8412698412698, 22.5641025641026, 
0, 31.9587628865979, 21.0526315789474, 43.4782608695652, 49.5867768595041, 
10.5263157894737, 7.69230769230769, 9.09090909090909, 0, 40, 
8.69565217391304, 0, 0, 7.31707317073171, 0.75187969924812, 1.96078431372549, 
14.2857142857143, 25.1968503937008, 7.01754385964912, 50.6398537477148, 
60.5584642233857, 73.558981233244), iyear = 1985:2014), .Names = c("pnattacks", 
"ptra", "pdom", "punc", "iyear"), row.names = c(NA, 30L), class = "data.frame") 
+2

可能な重複](http://stackoverflow.com/questions/5027016/missing-legend-with-ggplot2-and-geom-line) – lbusett

+2

データをワイドフォーマットからロングフォーマットに再編成する必要があります。おそらく ' reshape2'または 'tidyr'パッケージをインストールします。サンプルデータセットを提供すると、それを行う方法を実証することができます。 – www

+0

あなたのデータをどのように共有できるかをご覧になるには、ここをクリックしてください[http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example] – lbusett

答えて

0

コメントで示唆したように、 tidyr::gatherは、広いフォーマットから長いフォーマットにデータを取得するので、ggplotの方がずっと簡単です。

私はグループを区別するために、色ではなく、線種をお勧めしたいが、ここでは、線種である:

library(tidyr) 
library(ggplot2) 

ystats %>% 
    gather(coding_success, percentage, -iyear) %>% 
    ggplot(aes(iyear, percentage)) + 
    geom_line(aes(linetype = coding_success), size = 1) + 
    scale_linetype_manual(values = c("F1", "dotted", "longdash", "solid")) + 
    labs(x = "Year", y = "percentage", title = "Coding Success") 

結果:ggplot2とGEOMの\ _lineと[欠落伝説の enter image description here

関連する問題