新・土と生き物

inherit.aes = FALSE

2025-09-04 19:01:51
2025-09-04 19:04:12
目次

午前

  • 野外調査

午後

  • データ解析

こんな感じで、ggplotでレイヤ間で異なるデータを使ったら、

ggplot(data=df, aes(x = A, y = B)) +
  geom_point() +
  geom_line(data = newdf, aes(x = A, y = fit)) +
  geom_ribbon(data = newdf, aes(x = A, ymin = lower, ymax = upper)

geom_ribbon( )で、下記のように「B」がないよ、と指摘された。

Error in `geom_ribbon()`:
! Problem while computing aesthetics.
ℹ Error occurred in the 3rd layer.
Caused by error:
! object 'B' not found

これは、最初にaesで「y=B」と指定しているけど、geom_ribbon( )で使っているnewdfにないことが原因(だと思う)。

なぜか、geom_line( )までならエラーがでない。

解決策としては、後のレイヤにaesの継承させないようにすればよい。

aesを継承させないコマンドとして「inherit.aes = FALSE」というのがある。こんな感じで使う。

ggplot(data=df, aes(x = A, y = B)) +
  geom_point() +
  geom_line(data = newdf, 
        inherit.aes = FALSE, #継承を切る
        aes(x = A, y = fit)) +
  geom_ribbon(data = newdf,
        inherit.aes = FALSE, #継承を切る
        aes(x = A, ymin = lower, ymax = upper))

この記事を書いた人

SK

ダンゴムシ・ワラジムシを研究しています! https://diversity.jpn.org/kara/index.html