2016-04-14 9 views
2

私は、時間の経過とともに豊富な種を表示するグラフを作成しようとしています。 最後のグラフはgeom_densityを使って生成されたもののように見えますが、各種の滑らかな曲線が必要です。たとえば、このサイトの図1(Figure 1)。しかし、密度の代わりにyの値(存在量)を使用するようにRを操作することはできませんでした。 私はgeom_areaの使用を管理しましたが、これは実際に私が望む出力ではありません。 geom_densityがy値を受け入れる方法を知っている人はいますか?あるいは、滑らかな曲線を持つプロット種の存在量?geom_areaまたはgeom_densityを使用して種の存在量曲線を作成する

例:値は、種の存在量である場合

data.set <- data.frame(
    Time = c(rep(1, 4),rep(2, 4), rep(3, 4), rep(4, 4)), 
    Type = rep(c('a', 'b', 'c', 'd'), 4), 
    Value = rpois(16, 10) 
) 

、時間は、各存在度を記録したこと時点で、タイプは、4つの異なる種を表します。

ggplot(data.set, aes(Time, Value)) + geom_area(aes(fill = Type)) 

これがプロットされると、非常に「チャンク」です。私は、滑らかなカーブを作成するためにgeom_densityのようなものを使い、アルファを使って透明にする方が好きです。

助けていただけたら幸いです!

答えて

1

あなたは、私は、ラインプロットとしてこれらをしませんでした平滑化バージョン enter image description here

注オリジナルのプロットに

library(ggplot2) 
library(data.table) #for rbindlist 

# break data.frame into chunks by type 
type_chunks <- split(data.set, data.set$Type) 

# apply spline function to each chunk 
spline_chunks <- lapply(seq_along(type_chunks), function(i) { 
    x <- type_chunks[[i]] 
    data.frame(Type=names(type_chunks)[i], 
      spline(x$Time, x$Value, n=50)) # choose a value for n 
}) 

# crush chunks back to one data.frame 
spline_df <- rbindlist(spline_chunks) 

# original plot 
ggplot(data.set, aes(Time, Value)) + geom_line(aes(color = Type), size=2) 

# plot smoothed version 
ggplot(spline_df, aes(x, y)) + geom_line(aes(color = Type), size=2) 

(2010年からthis答えは1として)補間する enter image description here

spline()を使用することができますあなたがリンクした投稿と一致するので、エリアプロットは、シリーズプロットは、 ent。

+0

また、私は@hrbrmstrがgeom_xspline' 'について投稿するとすぐに沿っことと確信しているが、それは別のパッケージをインストールする必要があります:https://github.com/hrbrmstr/ggalt – arvi1000

0

興味深いことに、データセットでない場合は、stat_densityを使用することができます。

Valueに要約されたカウントに基づいて、このような単純なデータセットを展開するのはかなり簡単です。Valueに基づいて行を追加します。オプションhereを参照してください。

# Make expanded dataset 
d2 = data.set[rep(row.names(data.set), data.set$Value), 1:2] 
head(d2) 

    Time Type 
1  1 a 
1.1 1 a 
1.2 1 a 
1.3 1 a 
1.4 1 a 
1.5 1 a 

その後、あなたはy美的ため..count..を用いて所望のプロットを作ることができます。密度プロットを作成することも、stat = "density"を使用して線プロットを作成することもできます。ここに後者の例があります。

ggplot(d2, aes(Time, y = ..count.., color = Type)) + 
    geom_line(size = 1, stat = "density") 

enter image description here

関連する問題