2016-06-15 70 views
0

私はプロットで複数の行の線の種類( "ソリッド"、 "ダッシュ"、 "ドット"など)を設定しようとしています。私は、行のタイプを指定するデータフレームに列(因子変数)を持っています。plotly線種のpopertyの設定R

以下は、私が使用しているサンプルコードです。

mydf <- data.frame(x = c(1:10), y1 = c(11:20), y2 = c(21:30)) 
mydf1 <- gather(mydf,'var', 'val', -x) 
mydf1$lt <- factor(c(rep("solid",10),rep("dot",10))) 
pal <- RColorBrewer::brewer.pal(nlevels(mydf1$lt),"Set1") 
p <-plot_ly(mydf1, x = x, y = val, type = 'line', color = var,colors = pal,line = list(width = 3, dash = lt)) 
p<- layout(p,title = "Hello", annotations = list(x = mydf1$x, y = mydf1$var)) 

p 

mydf1 $ ltは、必要な行タイプを指定します。 上記の例では、y1は実線で、y2は点線でなければなりません。

enter image description here

私が個別にadd_trace()を使用して行を追加することで、問題を解決することができます。私は同じことをするより簡潔でエレガントな方法を探しています。以下は可能な解決策の1つです。上記例えば

p1 <- plot_ly(mydf) 
p1 <- add_trace(p1, x = x, y = y1, line = list(dash = "dash")) 
p1 <- add_trace(p1, x = x, y = y2, line = list(dash = "solid")) 
p1 

enter image description here

答えて

0

、Y1はライン及びy2は ラインを点在されなければならない固体でなければなりません。

あなたはそれ他の方法で回避したい場合は、

library(ggplot2) 
library(tidyr) 
library(plotly) 
mydf <- data.frame(x = c(1:10), y1 = c(11:20), y2 = c(21:30)) 
mydf1 <- gather(mydf,'var', 'val', -x) 
mydf1$lt <- factor(c(rep("solid",10),rep("dot",10))) 
pal <- RColorBrewer::brewer.pal(nlevels(mydf1$lt),"Set1") 
p <-plot_ly(
    transform(mydf1, lt=c(solid="solid", dot="3")[lt]), 
    x = x, 
    y = val, 
    type = 'line', 
    color = var, 
    colors = pal, 
    line = list(dash = lt) 
) 
p <- layout(
    p, 
    title = "Hello", 
    annotations = list(x = mydf1$x, y = mydf1$var) 
) 
p 

またはc(solid="3", dot="solid")[lt]を行うことができます。

enter image description here

+0

ありがとうございます。 「ドット」を意味する「3」が何であるか説明できますか?線種とそれに対応する数値の間にはどのような種類の列挙/変換が起こりますか? – user98180

+0

「3」は破線のドット間隔/幅です。 (ソリッド= "ソリッド"、ドット= "3")[lt] 'は因子レベル'ドット 'を値' 3 'にマッピングします。 – lukeA

関連する問題