从 R 中的两个数据框创建的线图的 Plotly 子图的单个图例
Single legend for Plotly subplot for line plots created from two data frames in R
我正在尝试从两个数据框绘制折线图,其中两个数据框的第一列将绘制在一个框架中,依此类推。最后,所有情节都将放在一个子情节下。但是我得到了多个具有相同符号的图例。数据帧是-
d1 <- data.frame(x = 1:5,
y = c(2, 3, 4, 1, 5),
z = c(2, 1, 4, 6, 8))
d2 <- data.frame(x = 1:5,
y = c(1, 5, 8, 9, 11),
z = c(3, 5, 8, 13, 11))
我试图生成子图的代码是-
py <-
plot_ly(
x = d1$x,
y = d1$y,
type = "scatter",
mode = "lines",
name = names(d1)[2],
line = list(color = "#56B4E9")
) %>% add_trace(y = d2$y,
name = names(d1)[3],
line = list(color = "#D55E00"))
pz <-
plot_ly(
x = d1$x,
y = d1$z,
type = "scatter",
mode = "lines",
name = names(d1)[2],
line = list(color = "#56B4E9")
) %>% add_trace(y = d2$z,
name = names(d1)[3],
line = list(color = "#D55E00"))
subplot(py, pz)
输出是-
有什么办法可以去掉重复的图例吗?
提前致谢。
这可以通过首先将数据置于正确的形状中来实现,这也可以简化绘图。简单地行绑定你的 dfs 例如通过 dplyr::bindrows
并且您拥有设置 legendgroup
所需的变量。此外,您的颜色不反映变量 y 和 z,而是反映数据集。试试这个:
library(dplyr)
library(plotly)
d1 <- data.frame(x = 1:5,
y = c(2, 3, 4, 1, 5),
z = c(2, 1, 4, 6, 8))
d2 <- data.frame(x = 1:5,
y = c(1, 5, 8, 9, 11),
z = c(3, 5, 8, 13, 11))
# Bind the dfs
d3 <- bind_rows(list(d1 = d1, d2 = d2), .id = "id")
py <- d3 %>%
plot_ly(x = ~x, y = ~y, color = ~id, legendgroup= ~id) %>%
add_lines(colors = c("#D55E00", "#56B4E9"))
pz <- d3 %>%
plot_ly(x = ~x, y = ~z, color = ~id, legendgroup= ~id) %>%
add_lines(colors = c("#D55E00", "#56B4E9"), showlegend = FALSE)
subplot(py, pz) %>%
layout(legend=list(title=list(text='<b> Dataset </b>')))
由 reprex package (v0.3.0)
于 2020 年 4 月 10 日创建
我正在尝试从两个数据框绘制折线图,其中两个数据框的第一列将绘制在一个框架中,依此类推。最后,所有情节都将放在一个子情节下。但是我得到了多个具有相同符号的图例。数据帧是-
d1 <- data.frame(x = 1:5,
y = c(2, 3, 4, 1, 5),
z = c(2, 1, 4, 6, 8))
d2 <- data.frame(x = 1:5,
y = c(1, 5, 8, 9, 11),
z = c(3, 5, 8, 13, 11))
我试图生成子图的代码是-
py <-
plot_ly(
x = d1$x,
y = d1$y,
type = "scatter",
mode = "lines",
name = names(d1)[2],
line = list(color = "#56B4E9")
) %>% add_trace(y = d2$y,
name = names(d1)[3],
line = list(color = "#D55E00"))
pz <-
plot_ly(
x = d1$x,
y = d1$z,
type = "scatter",
mode = "lines",
name = names(d1)[2],
line = list(color = "#56B4E9")
) %>% add_trace(y = d2$z,
name = names(d1)[3],
line = list(color = "#D55E00"))
subplot(py, pz)
输出是-
有什么办法可以去掉重复的图例吗?
提前致谢。
这可以通过首先将数据置于正确的形状中来实现,这也可以简化绘图。简单地行绑定你的 dfs 例如通过 dplyr::bindrows
并且您拥有设置 legendgroup
所需的变量。此外,您的颜色不反映变量 y 和 z,而是反映数据集。试试这个:
library(dplyr)
library(plotly)
d1 <- data.frame(x = 1:5,
y = c(2, 3, 4, 1, 5),
z = c(2, 1, 4, 6, 8))
d2 <- data.frame(x = 1:5,
y = c(1, 5, 8, 9, 11),
z = c(3, 5, 8, 13, 11))
# Bind the dfs
d3 <- bind_rows(list(d1 = d1, d2 = d2), .id = "id")
py <- d3 %>%
plot_ly(x = ~x, y = ~y, color = ~id, legendgroup= ~id) %>%
add_lines(colors = c("#D55E00", "#56B4E9"))
pz <- d3 %>%
plot_ly(x = ~x, y = ~z, color = ~id, legendgroup= ~id) %>%
add_lines(colors = c("#D55E00", "#56B4E9"), showlegend = FALSE)
subplot(py, pz) %>%
layout(legend=list(title=list(text='<b> Dataset </b>')))
由 reprex package (v0.3.0)
于 2020 年 4 月 10 日创建