2016-12-21 17 views
4

plotlyに折れ線グラフを作成して、その全長が同じにならないようにします。色は連続的なスケールで与えられます。 ggplot2では簡単ですが、plotlyに翻訳すると、ggplotly関数を使用すると、変数を決定する色はカテゴリ変数のように動作します。ggplot2とggplotlyを使ったプロットの動作が異なる

require(dplyr) 
require(ggplot2) 
require(plotly) 

df <- data_frame(
    x = 1:15, 
    group = rep(c(1,2,1), each = 5), 
    y = 1:15 + group 
) 

gg <- ggplot(df) + 
    aes(x, y, col = group) + 
    geom_line() 

gg   # ggplot2 
ggplotly(gg) # plotly 

ggplot2(希望): enter image description hereplotlyenter image description here

Iは、1つのワークアラウンド一方、ggplot2で奇妙な挙動することを発見しました。

df2 <- df %>% 
    tidyr::crossing(col = unique(.$group)) %>% 
    mutate(y = ifelse(group == col, y, NA)) %>% 
    arrange(col) 

gg2 <- ggplot(df2) + 
    aes(x, y, col = col) + 
    geom_line() 

gg2 
ggplotly(gg2) 

私はまた、これをプロットして直接行う方法を見つけられませんでした。おそらく解決策が全くないのかもしれません。何か案は?

答えて

3

数値ではあるが、ggplotlyがgroupを要因として扱っているようです。 @のRAWRさん(現在は削除)コメントについて

gg2 = ggplot(df, aes(x,y,colour=group)) + 
    geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) 

gg2 

enter image description here

ggplotly(gg2) 

enter image description here

、私は思う:あなたはセグメントがポイントの各ペア間に描かれていることを確認するために、回避策としてgeom_segment使用することができます線の色を連続変数にマップする場合は、groupを連続にすることは理にかなっています。以下は、OPの例をgroup列に拡張したもので、2つの離散カテゴリを持つのではなく、連続しています。

set.seed(49) 
df3 <- data_frame(
    x = 1:50, 
    group = cumsum(rnorm(50)), 
    y = 1:50 + group 
) 

プロットgg3は以下geom_lineを使用しますが、私はまた、geom_pointを含めました。 ggplotlyがポイントをプロットしていることがわかります。ただし、2つの点には同じ値のgroupがないため、行はありません。 geom_pointが含まれていない場合、グラフは空白になります。 geom_segmentから

enter image description here

スイッチング

ggplotly(gg3) 

enter image description here

gg3 <- ggplot(df3, aes(x, y, colour = group)) + 
    geom_point() + geom_line() + 
    scale_colour_gradient2(low="red",mid="yellow",high="blue") 

gg3 

は、私たちが ggplotlyにしたいラインを提供します。ただし、線の色は、セグメント内の最初のポイント( geom_lineまたは geom_segmentを使用しているかどうかにかかわらず)の groupの値に基づいているため、 groupの値を各(x、y )スムーズな色のグラデーションを得るためにペア:

gg4 <- ggplot(df3, aes(x, y, colour = group)) + 
    geom_segment(aes(x=x, xend=lead(x), y=y, yend=lead(y))) + 
    scale_colour_gradient2(low="red",mid="yellow",high="blue") 

ggplotly(gg4) 

enter image description here

+0

これは徹底的です!どうもありがとう –

関連する問題