Symfoware

Symfowareについての考察blog

R言語 指定範囲に矩形を描画し強調する

R言語でグラフの書き方を勉強中です。
折れ線グラフを描画した時、指定範囲を矩形で囲んで強調する方法をメモしておきます。


やりたいこと



売上でもサーバー負荷でも良いのですが、一定期間の折れ線グラフがあるとします。
例えば5日から15日は広告出したのでグラフのピークが上昇しています。
この5日から15日の期間を強調したい。




ベースとなるグラフ



1ヶ月間のサーバーのCPU使用率っぽいグラフにします。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. graphics.off()




こんなグラフになりました。

481_01.png

5から15の期間を強調したい。





矩形の描画



グラフに矩形を描画するには「rect」を使用します。


  1. rect(xleft, ybottom, xright, ytop,
  2.      col=NULL, border=par("fg"), lty=NULL, lwd=par("lwd"), xpd=FALSE)




x軸が5から15、y軸が0から100まで赤で塗りつぶしてみます。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. rect(5, 0, 15, 100, col=rgb(1,0,0))
  12. graphics.off()



481_02.png

とりあえず、狙った位置に矩形が描画できました。




色の透過指定



色を透過させるには、rgbの引数にalphaを指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. # alphaで透過度を指定
  12. rect(5, 0, 15, 100, col=rgb(1,0,0, alpha=0.1))
  13. graphics.off()



481_03.png




枠線の描画停止



矩形の枠線を消しましょう。
lty=0(透明の線)を指定します。

ltyについてはこちらで勉強しました。
R言語 折れ線グラフの色、線の種類、太さを指定する


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. # alphaで透過度を指定
  12. # lty=0で線なしを指定
  13. rect(5, 0, 15, 100, col=rgb(1,0,0, alpha=0.1), lty=0)
  14. graphics.off()



481_04.png



塗りつぶしのY軸範囲を最大化



y軸の塗りつぶしで、上下に余白ができています。
これをグラフいっぱいに描画してみます。

par()$usrで描画範囲が取得できるのでした。
R言語 グラフに凡例を表示する(legend)

変数の内容は以下のとおりです。


par()$usr[1]:x軸最小値
par()$usr[2]:x軸最大値
par()$usr[3]:y軸最小値
par()$usr[4]:y軸最大値




par()$usr[3]とpar()$usr[4]を指定するようにしてみます。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. # alphaで透過度を指定
  12. # lty=0で線なしを指定
  13. # par()$usrでy軸いっぱいに矩形を描画
  14. rect(5, par()$usr[3], 15, par()$usr[4], col=rgb(1,0,0, alpha=0.1), lty=0)
  15. graphics.off()



481_05.png




コメントの表示



「広告掲載期間」というコメントを表示してみます。


  1. text(x, y, "ラベル")



という書式です。
座標は描画される文字の中央を指定します。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. # alphaで透過度を指定
  12. # lty=0で線なしを指定
  13. # par()$usrでy軸いっぱいに矩形を描画
  14. rect(5, par()$usr[3], 15, par()$usr[4], col=rgb(1,0,0, alpha=0.1), lty=0)
  15. text(10, 20, "広告掲載期間")
  16. graphics.off()



481_06.png


フォントサイズを大きめのものに変更するにはcexを指定。


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. days = 1:31
  3. cpu_avg = c(
  4. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  5. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  6. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  7. )
  8. # plot関数でデータを配置
  9. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  10. # 指定範囲を矩形で塗りつぶし
  11. # alphaで透過度を指定
  12. # lty=0で線なしを指定
  13. # par()$usrでy軸いっぱいに矩形を描画
  14. rect(5, par()$usr[3], 15, par()$usr[4], col=rgb(1,0,0, alpha=0.1), lty=0)
  15. # cex=2:通常の2倍の大きさで文字を表示
  16. text(10, 20, "広告掲載期間", cex=2)
  17. graphics.off()



481_07.png



使用するフォントを変更するにはこちら。
R言語 グラフに使用するフォントファイルを指定する


  1. png("image.png", width = 500, height = 300, pointsize = 12, bg = "white")
  2. # IPA明朝を使用するよう指定
  3. par(family="IPAMincho")
  4. days = 1:31
  5. cpu_avg = c(
  6. 13, 15, 14, 9, 78, 80, 72, 86, 75, 89,
  7. 74, 70, 87, 90, 92, 20, 15, 10, 16, 18,
  8. 16, 11, 15, 17, 9, 15, 14, 10, 19, 14, 10
  9. )
  10. # plot関数でデータを配置
  11. plot(days, cpu_avg, type="l", ylim=c(0, 100))
  12. # 指定範囲を矩形で塗りつぶし
  13. # alphaで透過度を指定
  14. # lty=0で線なしを指定
  15. # par()$usrでy軸いっぱいに矩形を描画
  16. rect(5, par()$usr[3], 15, par()$usr[4], col=rgb(1,0,0, alpha=0.1), lty=0)
  17. # cex=2:通常の2倍の大きさで文字を表示
  18. text(10, 20, "広告掲載期間", cex=2)
  19. graphics.off()



481_08.png



【参考URL】

51. 低水準作図関数

Draw a Rectangle

Rで半透明の散布図を描く

Add Text to a Plot

R言語 掲載記事のまとめ
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2014/10/12(日) 18:33:32|
  2. 備忘録
  3. | トラックバック:0
  4. | コメント:2
  5. | 編集
<<R言語 棒グラフを描画する(通常、列挙、積み上げ、割合) | ホーム | R言語 グラフに使用するフォントファイルを指定する>>

コメント

xlimとylimの値を出す方法や、長方形を書くコマンドは探してもなかなか見つからなかったので、非常に助かりました。
  1. 2017/09/06(水) 20:35:48 |
  2. URL |
  3. #-
  4. [ 編集 ]

コメントありがとうございます!
お役に立ったようで良かったです。
  1. 2017/09/12(火) 21:51:25 |
  2. URL |
  3. symfo #-
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1507-089ce87c
この記事にトラックバックする(FC2ブログユーザー)