読者です 読者をやめる 読者になる 読者になる

山羊の午後

研究関係の備忘録。

グラフの選び方:棒グラフか? 折れ線グラフか?

 データを適切に解釈するには、見やすい、分かりやすいグラフを描くことが必要です。自分の好みでグラフを作っていると、誤った結論に陥ることもあります。
 二つのグラフがどんなものに向いているのかを知っておけば、適切にグラフを使い分けることができるでしょう。

棒グラフ

  • 横軸には連続データ(時間、投与量など)または、非連続データ(カテゴリ、雌雄、条件など)をとる。
  • 棒の面積で各値を量的に判断することが出来る。
    • 積み上げ棒グラフ:各項目の割合と全体量の変化を見ることが出来る。
  • 時系列などの連続データにおいて、長期的な傾向を掴むのに適している。短期的な変化を比較するのには向いていない。
  • 縦軸は省略せず、全体量を表示する。
よく使われる例
年・月ごとの収入・支出の変化、実験条件による効果の違い、毎年の収穫量の変化、雨量や積雪量、候補者ごとの得票数の違い、など。どれだけ多いか、少ないかを見たいときに使う。

折れ線グラフ

  • 横軸には連続データ(時間、日時、年、投与量など)を取る。
    • 非連続データ(カテゴリ、雌雄、条件など)を横軸に使わない。*1
  • 線の傾きにより、各値の連続的な変化を追うことが出来る。とくに短期的な変化を追うのに向いている。
  • 複数項目の折れ線グラフは、各項目の順位や相対的な変化を見ることが出来る。
  • 縦軸は省略しないべきだが、必要であれば変化が見やすい範囲に拡大してもよい。
よく使われる例
毎日の体重の変化、月ごとの気温の変化、時間ごとの反応数の移り変わり、毎分ごとの視聴率、など。直前に比べて上がったか、下がったか、が見たいときに使う。

同じデータを用いた二つのグラフ例

f:id:yk_uminami:20160531010536p:plain

  • 棒グラフ
    • Con群とTest群の反応の量的な違いが見やすい。
      • Test群はCon群の2倍以上反応することが分かる。
    • 投与量における各群の変化は上昇していることは分かるが、投与量ごと変化の違いは分かりにくい。
  • 折れ線グラフ
    • Con群とTest群の投与量に対する反応の変化の違いが見やすい。
      • Test群では10から20の変化のほうが20から30の変化より大きい。*2
    • 群間の量的な違いは分かりにくい。
  • この場合、投与量ごとの効果の変化よりも、群間の効果の違いが見たいので、棒グラフを選ぶ。
group<-c(10,20,30) #投与量
m.Con<-c(0.079,0.102,0.146) #Con群 平均値
sd.Con<-c(0.022,0.051,0.026) #Con群 SD
m.Test<-c(0.12,0.25,0.34) #Test群 平均値
sd.Test<-c(0.055,0.031,0.026) #Test群 SD

yRoof=round(max(m.Con+sd.Con, m.Test+sd.Test)*1.2, 1) 
yFloor=round(min(m.Con-sd.Con, m.Test-sd.Test)*1.2, 2) 

dev.new(width=800, height=400)
par(mfcol=c(1,2))

#棒グラフ
graph1<-barplot(rbind(m.Con, m.Test),beside=T, 
	xlab="Dose of drug (mg/kg)",ylab="Response",
      names=group, ylim=c(0,yRoof), col=c(0,8))

arrows(graph1,rbind(m.Con,m.Test),
       graph1, rbind(m.Con+sd.Con,m.Test+sd.Test),
       angle=90, length=0.1,lwd=2)
arrows(graph1,rbind(m.Con,m.Test),
       graph1,rbind(m.Con-sd.Con, m.Test-sd.Test),
       angle=90,length=0.1,lwd=2)

axis(side=1, c(mean(graph1[,1]),mean(graph1[,2]),mean(graph1[,3])), labels=F) 
legend("topleft", c("Con","Test"), fill=c(0,8)) 
title("Bar graph with two factors")

#折れ線グラフ
matplot(group,cbind(m.Con,m.Test),type="b",ylim=c(yFloor,yRoof),
	lty=1,col=c(1,8), cex=2, pch=17, xlab="Dose of drug (mg/kg)",ylab="Response")

arrows(group,cbind(m.Con,m.Test),group,cbind(m.Con+sd.Con,m.Test+sd.Test),
       angle=90,length=0.1,lwd=2,col=c(1,1,1,8,8,8))
arrows(group,cbind(m.Con,m.Test),group,cbind(m.Con-sd.Con,m.Test-sd.Test),
       angle=90,length=0.1,lwd=2,col=c(1,1,1,8,8,8))

legend("topleft",legend=c("Con","Test"),pch=17,col=c(1,8),cex=1.3)
title("Line graph with two factors")



どっちのグラフにするか判別チャート

  • 横軸にとるデータは
    1. 非連続データである:棒グラフ
    2. 連続データである(大小があり、数直線状に並べられるもの)
    • データから読み取りたいのは
      1. 量的、長期的な変化:棒グラフ
      2. 短期的な変化:折れ線グラフ


 あくまで目安です。データからどんな情報を読み取りたいのか考えて選ぶことが大事です。


yaginogogo.hatenablog.jp
yaginogogo.hatenablog.jp

*1:例外はもちろんある。たとえば群間の交互作用を見たいときなどは、折れ線グラフのほうが変化の違いが見やすい。

*2:この違いに意味があるかは別として。