web-dev-qa-db-ja.com

ggplot.data.frameのエラー:マッピングはaesまたはaes_stringで作成する必要があります

ggplotからパスを抽出中に問題が発生し、エラーが発生しました。

以下の画像は、私が探している結果を説明しています:(目的を説明するために画像エディタで行われています)

Image

プロット1が私の元のプロットであると仮定しましょう。私が探しているのは、最初のポイントを「F」ポイントとして、そのポイントから24時間移動することです。

Des %>%
   mutate(nf = cumsum(ACT=="F")) %>%  # build F-to-F groups
group_by(nf) %>%
mutate(first24h = as.numeric((DateTime-min(DateTime)) < (24*3600))) %>% # find the first 24h of each F-group
ggplot(aes(x=Loq, y=Las)) + 
geom_path(aes(colour=first24h)) + scale_size(range = c(1, 2))+ geom_point()

Library(Zoo)
full.time = seq(Des$DateTime[1], tail(Des$DateTime, 1), by=600)   # new timeline with point at every 10 min
d.Zoo = Zoo(Des[,2:3], Des$DateTime)        # convert to Zoo object
d.full = as.data.frame(na.approx(d.Zoo, xout=full.time))  # interpolate; result is also a Zoo object
d.full$DateTime = as.POSIXct(rownames(d.full))

補間にna.approxを使用している場合、エラーが発生しますか?それ以外の場合はそうではありません。

近似値(x [!na]、y [!na]、xout、...)のエラー:補間するには少なくとも2つの非NA値が必要です。さらに、警告メッセージ:In xy.coords(x、y):NA強制により導入

これら2つのdata.framesを組み合わせて。すべてのF-Fセクションは個別のプロットに描かれ、Fポイントが表示されてから24時間以内のポイントのみが表示されます

library(dplyr)
library(ggplot)

Des %>%
  select(ACT, DateTime) %>%
  right_join(d.full, by="DateTime") %>%
  mutate(ACT = ifelse(is.na(ACT),"",ACT)) %>%
  mutate(nf = cumsum(ACT=="F")) %>%
  group_by(nf) %>%
  mutate(first24h = (DateTime-min(DateTime)) < (24*3600)) %>%
  filter(first24h == TRUE) %>%
  filter(first24h == 1) %>%
  ggplot(Des, aes(x=Loq, y=Las,colour=ACT)) +
  geom_path() + facet_wrap(~ nf)

エラー

Ggplot.data.frame(。、Des、aes(x = Loq、y = Las、color = ACT))のエラー:マッピングはaesまたはaes_stringで作成する必要があります

これは私のDes形式です。

ID  Las  Loq  ACT  Time  Date
1  12    13   R  23:20 1-1-01
1  13    12   F  23:40 1-1-01
1  13    11   F  00:00 2-1-01
1  15    10   R  00:20 2-1-01
1  12    06   W  00:40 2-1-01
1  11    09   F  01:00 2-1-01
1  12    10   R  01:20 2-1-01
so on...
9
user4993868

ggplotへの引数が多すぎるため、エラー(投稿のタイトル内)が発生します。質問ノートへのコメントとして、パイプライン%>%は、パイプの左側からの出力を、右側の関数への最初の引数として暗黙的に含めます。

# these have the same meaning
f(x, y)
x %>% f(y)

このコードは同じ種類のエラーを再現します。 (わかりやすくするために、aesマッピングを独自のステップに分離しました。)

mtcars %>% 
  filter(am == 1) %>% 
  ggplot(mtcars) + 
  aes(x = mpg, y = wt) + 
  geom_point()
#> Error in ggplot.data.frame(., mtcars) : 
#>   Mapping should be created with aes or aes_string

概念的には、物事を「パイプ解除」する場合、実行されるのは次のようなものです。

ggplot(filter(mtcars, am == 1), mtcars)

ggplot関数は、最初の引数がdataパラメーターであり、2番目がaesの美的マッピングであると想定しています。しかし、パイプラインでは、最初の2つの引数はデータフレームです。これがエラーの原因です。

解決策は、冗長なデータ引数を削除することです。より一般的には、データ変換パイプライン(%>%チェーン)ggplotプロットの建物(+チェーン)。

7
TJ Mahr
Des %>%
   mutate(nf = cumsum(ACT=="F")) %>%  # build F-to-F groups
   group_by(nf) %>%
   mutate(first24h = as.numeric((DateTime-min(DateTime)) < (24*3600))) %>% # find the first 24h of each F-group
   ggplot(., aes(x=Loq, y=Las)) + 
   geom_path(aes(colour=first24h)) + scale_size(range = c(1, 2))+ geom_point()

ポイント:ggplot(。、aes(x = Loq、y = Las))-'。'を使用二重にできないのでデータを参照する

0
Robert FC