2つのグラフを持つ基本的なサブプロットがあり、どちらにもデフォルトで凡例がありますが、そのうちの1つだけを表示したいと思います。
私はこれを試しました:
require(plotly)
p1 <- plot_ly(data=iris,x=~Sepal.Length,y=~Sepal.Width,split=~Species) %>% layout(showlegend = FALSE)
p2 <- plot_ly(data=iris,x=~Sepal.Length,y=~Sepal.Width,split=~Species) %>% layout(showlegend = TRUE)
subplot(p1,p2)
subplot(p2,p1)
しかし、それは機能しません。1つのshowlegend属性のみが処理されたように見えるので、p1から始めると2つの凡例があり、p2から始めると2つあります。
何か案は ?
上記の答えは小さな問題になります。凡例は最初のプロットとのみ対話します。凡例を両方のプロットとインタラクティブにするには、legendgroupをplot_ly関数に追加する必要があります。
library(plotly)
p1 <-
iris%>%
group_by(Species)%>%
plot_ly(x=~Sepal.Length, color= ~Species, legendgroup=~Species)%>%
add_markers(y= ~Sepal.Width)
p2 <-
iris%>%
group_by(Species)%>%
plot_ly(x=~Sepal.Length, color= ~Species, legendgroup=~Species)%>%
add_markers(y= ~Sepal.Width, showlegend=F)
subplot(p1,p2)
私はあなたに2つの答えを与えます、まっすぐなものと、より良い練習と後世のための1つ(これは問題をよりよく理解するのにも役立ちます):
正解:plot_ly()
関数ではなく、layout()
関数内に_showlegend = FALSE
_を追加してみてください。 _?subplot
_のドキュメントを見ると:
プロットのシーケンスの後半にあるレイアウトオプションは、シーケンスの前半にあるオプションを上書きします。
つまり、layout showlegend
オプションは、最後のプロットからのみ取得されます。ただし、plot_ly()
関数からshowlegend
オプションを使用すると、トレース自体に影響を与え、その動作をsubplot
内に保存します。これで、コードは次のようになります。
_require(plotly)
p1 <- plot_ly(data=iris,x=~Sepal.Length,y=~Sepal.Width,split=~Species,showlegend = F)
p2 <- plot_ly(data=iris,x=~Sepal.Length,y=~Sepal.Width,split=~Species, showlegend = T)
subplot(p1,p2)
_
プロット4.0以上でのより良い練習。
次のように、split
の代わりにパイプ演算子_%>%
_とgroup_by()
関数を使用します。
_p1 <-
iris%>%
group_by(Species)%>%
plot_ly(x=~Sepal.Length, color= ~Species)%>%
add_markers(y= ~Sepal.Width)
p2 <-
iris%>%
group_by(Species)%>%
plot_ly(x=~Sepal.Length, color= ~Species)%>%
add_markers(y= ~Sepal.Width, showlegend = F)
subplot(p1,p2)
_
この方法により、トレースがプロットでどのように機能するかをよりよく理解できます。データは最初にSpecies
でグループ化され、プロットを初期化するplot_ly()
関数に渡され、次にトレースタイプ(マーカー)を指定して実際にプロットを作成することがわかります。
トレースとそれぞれのオプションを追加または削除したり、グループ化変数を追加したり、テーブルを分割/要約したりする場合は、このようなコードの記述が簡単です。
これまでの回答には不確かな点があるようです。
まず第一に、私が見る限り、データフレームのグループ化は何の影響も及ぼしていません。これは、グループ化ではなく並べ替えの問題です( 上記のMaltasコメント が示すように)。したがって、データフレームは、グループ化変数として機能することを目的とした変数でソートする必要があります。しかし、それでもコードが機能しないという別の落とし穴があります。したがって、必要なlegendgroup
に加えて、次のことを確認する必要があります。
Species
によってソートされています)、したがって、これは機能するはずです:
library(plotly)
p1 <-
iris %>%
arrange(Species) %>%
plot_ly(x = ~Sepal.Length, color = ~Species, legendgroup = ~Species) %>%
add_markers(y = ~Sepal.Width)
p2 <-
iris %>%
arrange(Species) %>%
plot_ly(x = ~Sepal.Length, color = ~Species, legendgroup = ~Species) %>%
add_markers(y= ~Sepal.Width, showlegend = FALSE)
subplot(p1, p2)
次の例は機能しません:
間違った変数でソート:
p1 <-
iris %>%
arrange(Sepal.Length) %>%
plot_ly(x = ~Sepal.Length, color = ~Species, legendgroup = ~Species) %>%
add_markers(y = ~Sepal.Width)
p2 <-
iris%>%
arrange(Sepal.Length) %>%
plot_ly(x=~Sepal.Length, color= ~Species, legendgroup=~Species)%>%
add_markers(y = ~Sepal.Width, showlegend = FALSE)
subplot(p1, p2)
値が欠落している変数:
df <- iris
df$Sepal.Length[2] <- NA
head(df)
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 NA 3.0 1.4 0.2 setosa
#> 3 4.7 3.2 1.3 0.2 setosa
#> 4 4.6 3.1 1.5 0.2 setosa
#> 5 5.0 3.6 1.4 0.2 setosa
#> 6 5.4 3.9 1.7 0.4 setosa
p1 <-
df %>%
arrange(Species) %>%
plot_ly(x = ~Sepal.Length, color = ~Species, legendgroup = ~Species) %>%
add_markers(y = ~Sepal.Width)
p2 <-
df %>%
arrange(Species) %>%
plot_ly(x = ~Sepal.Length, color = ~Species, legendgroup = ~Species)%>%
add_markers(y = ~Sepal.Width, showlegend = FALSE)
subplot(p1, p2)
たぶんあなたは簡単な方法を試すことができます。 (plotly 4.9.2)
subplot(style(p1, showlegend = F), p2)
P2の凡例が表示されます。これがうまくいくことを願っています。