我有一个带有两个图形的基本子图,默认情况下都有一个图例,但我只想看到其中一个.
我试过这个:
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)
Run Code Online (Sandbox Code Playgroud)
但它不起作用:似乎只有一个showlegend属性被处理,所以如果我从p1开始我有两个传说,如果我从p2开始我有两个.
有任何想法吗 ?
rve*_*ezy 11
我会给你两个答案,一个是直接答案,一个是为了更好的练习和后代(这也有助于更好地理解问题):
直接回答:
尝试showlegend = FALSE在plot_ly()功能内添加,而不是在功能中添加layout().如果我们查看?subplot文档:
稍后在绘图序列中找到的布局选项将覆盖序列中先前找到的选项.
换句话说,布局showlegend选项仅取自您的上一个图.但是使用函数中的showlegend选项plot_ly()会影响跟踪本身,从而在其中保存其行为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)
Run Code Online (Sandbox Code Playgroud)在4.0以上的情况下更好地练习.
使用管道运算符%>%和group_by()函数代替split,如下所示:
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)
Run Code Online (Sandbox Code Playgroud)这种做法可以让您更好地了解痕迹的工作原理.您可以看到数据首先被分组Species,传递给plot_ly()函数 - 初始化图 - 然后指定跟踪类型(标记)来实际绘制图.
当您想要添加或删除跟踪及其各自的选项,添加分组变量或拆分/汇总表时,编写这样的代码会更容易.
小智 8
上述答案导致一个小问题.图例仅与第一个图形互动.您需要将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)
Run Code Online (Sandbox Code Playgroud)
小智 8
也许你可以尝试一个简单的方法。(plotly 4.9.2)
subplot(style(p1, showlegend = F), p2)
Run Code Online (Sandbox Code Playgroud)
它只会显示p2的图例。希望这有效。
| 归档时间: |
|
| 查看次数: |
6972 次 |
| 最近记录: |