0

各行にある時点での 8 点の座標に関する情報が含まれるデータフレームがあります。

時間 x1 y1 x2 y2 x3 y3 … x8 y8

たとえば、行は次のようになります。

myData <- data.frame(time=0.1,x1=-7.79,y1=7.32,x2=-3.86,y2=-1.62,x3=-1.35,y3=-4.61,x4=-6.24,y4=-9.89,x5=-6.40,y5=2.00,x6=4.02,y6=4.77,x7=-1.42,y7=9.89,x8=6.59,y8=-8.02)

私が抱えている問題は、ggplot が各軸に対して 1 つの列名しか受け入れないことです。また、gganimateを使って点の動きをアニメートしたいので、ggplotを使いたいです。これどうやってするの?

各時点で標準の R の plot() メソッドを使用してプロットを描画し、再描画することで、データをアニメーション化することができましたが、アニメーションを保存したり、さらに操作したりすることはできません。

4

2 に答える 2

1

私はパイプ演算子に慣れてきたばかりtidyrなので、この回答を改善するための提案をいただければ幸いです。

最初にデータを再形成する必要があり(@Herokaが提案したように)、次に軸とポイントを分割する必要があります(x1、y8の名前に混ざっています)。これにより、渡すことができる適切な形状のデータフレームで終了しますggplotに:

gather(myData, "coord", "value", -time) %>% 
  separate(coord, sep = 1, into = c("axis", "val2")) %>% 
  spread(key = axis, value = value) %>% 
  ggplot(aes(x = x, y = y)) + geom_point()

私はに慣れていませんがgganimate、ここのフォームでパスを見つけることができると確信しています...

編集:

コードの最後の行を次のように変更すると、各ポイントを特定できます。

ggplot(aes(x = x, y = y, color = val2)) + geom_point()

編集2:

@Sitbu の提案に従って、コードの最初の行を変更しました

于 2016-02-26T13:45:05.650 に答える
1

これは PavoDive による回答に基づいており、アニメーション部分がどのように行われるかを追加するだけです。

実際にアニメーション化するものがあるように、より大きなデータセットを定義します。

set.seed(1544)
myData <- data.frame(seq(0, 1, by = 0.1),
                     matrix(runif(11*8*2, -10, 10), nrow = 11))
names(myData) <- c("time", paste0(c("x", "y"), rep(1:8, each = 2)))

次に、PavoDive のコードを使用して長い形式に変換します。

library(tidyr)
library(magrittr)
long_data <- 
gather(myData, "coord", "value", -time) %>% 
  separate(coord, sep = 1, into = c("axis", "val2")) %>% 
  spread(key = axis, value = value)

gg_animate()幸いなことに、使い方はかなり簡単です。フレームの美学を追加するだけです。

p <- ggplot(long_data, aes(x = x, y = y, frame = time)) + geom_point()
gg_animate(p, "animation.gif")

ここに画像の説明を入力

RStudio を使用している場合は、ファイル名を省略しgg_animate()て RStudio のプロット ペインにプロットを表示できます。

于 2016-02-26T14:05:52.297 に答える