ユーザ用ツール

サイト用ツール


Action disabled: source
メモ:ggplot

ggplot

ggplot関係のメモ

数値の「年」の末尾に「年度」を付ける

グラフの横軸が「年度」だがデータは数値の「年」の場合、「○○年度」と表示したい場合が多い。これまでは、文字列やfactorなどで新しい変数を作成してaes()に与えていたが、やはり数値データは数値データとして使いたい。ようやく理解したのは、データは数値として私、ラベルのフォーマットを変更すればよいということ。

以下のように、scalesパッケージのnumber_formatを使う。この場合、接尾辞として「年度」を付与し、精度は整数まで、桁区切りは無しにする。

scale_x_continuous(
  labels = scales::number_format(suffix = "年度", accuracy = 1, big.mark = ""),
)

scalesパッケージの「*_format」の使い方がいまいちわからなかったが、こういう時に使うということか。

geom_* からデータフレームにアクセス

例えば、2つのgeom_pointで片方はデータを絞り込んでプロットしたいときなど、ggplotに与えられたデータフレームにアクセスしたい場合がある。ggplotに与えるデータフレームをあらかじめ作成してから処理する場合は、元のデータフレームを用いて絞り込み等をかければよいが、パイプでデータ処理をしたうえで、パイプから直接ggplotにデータフレームを与えるとき、しばしばデータ処理を施した段階のデータフレームにアクセスしたいことがある。多くの場合、データフレームの各フィールドに直接アクセスすればよいが、一部のgeom_*のdataに、元のデータフレームに追加でフィルタなどを施したいことがある。そのような場合のトリック。

source_data %>%
filter(年度==2020) %>%
ggplot(aes(x=算数, y=国語)) +
geom_point() +
geom_point(data=~.x %>% filter(理科>=45), color="red", size=5)

ほとんど意味はないし、他の方法もあるが例として。

2020年度に絞り込んで算数と国語の成績で散布図を作成したい。その際、理科の成績が45点以上の時は、さらに赤で大きめの点を重ねたい。その時、2番目のgeom_pointのdataオプションで理科が45点以上に絞ったデータを与えたい。ここで、source_dataからデータを作成しようとすると、ggplotに渡す直前までの処理をもう一度書いて、さらにそこから理科が45点以上というフィルタをかけなければならず、煩雑で変更する際の修正箇所も増える。そこで、dataの値に「~」を付けてformulaとすると、どうも「.x」でggplotに与えられたデータフレームにアクセスできるらしい。それを利用して「~ .x %>% filter(理科>45)」とすると、ggplotに与えられた段階のデータフレームに対してさらに処理を加えることができるようだ。

数値軸の表示範囲

数値軸の表示範囲を決める場合、ズームをするときはcoord_cartesianを利用するが、折れ線グラフの上部にgeom_textなどで値を表示するような場合、最大のデータポイントのテキストが見切れる場合がある。これに対する処理として、geom_blankを上に挿入する方法などがあるが、scale_y_continuousのexpandを利用する方法もある。

... +
scale_y_continuous(expand = c(.1,.1)) +
....

expandはデータの最小、最大に対してどれだけ余白を設けるかを決めているようだ。上記の例では、それぞれ10%の余白を入れる設定になる。これで、最大のデータポイントより上に余白ができるので、ラベルなどがはみ出すのを防げる。

メモ/ggplot.txt · 最終更新: 2020/05/10 12:33 by Wiki Editor