У меня есть фрейм данных с 2 столбцами, один из которых я хочу использовать в качестве переключателя (для отображения grp1 или grp2), а другой - где я хочу разбить данные на разные строки. Кажется, я не могу понять, как заставить его работать должным образом, я думаю, что должен быть простой и простой способ сделать это, но я не могу заставить себя прекратить смешивать группы. 1001 *
library(tidyverse)
library(plotly)
library(ggplot2)
# example data my group 1 would be social, group 2 would be grp
df1 = data.frame(grp = "A", social = "Facebook",
days = c("2020-01-01","2020-01-02","2020-01-03","2020-01-04"),
yval = c(0.1, 0.2, 0.3, 0.4))
df2 = df1
df2$grp = "B"
df2$yval = df2$yval + 0.2
df3 = df1
df3$grp = "C"
df3$yval = df3$yval + 0.4
df = rbind(df1, df2, df3)
aux = df
aux$social = "Twitter"
aux$yval = aux$yval + 0.1
df = rbind(aux, df)
rm(aux, df1, df2, df3)
df$days = as.Date(df$days)
df$social_group = paste(df$social, df$grp)
ggplot(data = df, mapping = aes(x = days, y = yval, color = social)) + geom_point() + geom_line() + facet_wrap(facets = ~social)
![ggplot visualization aid](https://i.stack.imgur.com/SU7jJ.png)
Итак, я пытаюсь создать сюжет, который позволяет мне переключаться между фасетами ggplot, переключая Facebook или Кнопка Twitter.
Это то, что я сейчас получил, что хорошо запускает , но как только я нажимаю кнопки, группы, кажется, смешиваются, чего не должно быть, если я Фильтрую по другому столбцу ...
facebook_annotations <- list(
data=df %>% filter(social=="Facebook"),
x=~days,
y=~yval,
color = ~grp,
hovertemplate = paste('%{x}', '<br>Hover text: %{text}<br>'),
text=~days
)
twitter_annotations <- list(
data=df %>% filter(social=="Twitter"),
x=~days,
y=~yval,
color = ~grp,
hovertemplate = paste('%{x}', '<br>Hover text: %{text}<br>'),
text=~days
)
# updatemenus component
updatemenus <- list(
list(
active = 0,
type = "buttons",
buttons = list(
list(
label = "Facebook",
method = "update",
args = list(list(visible = c(TRUE, FALSE)),
list(title = "Facebook",
annotations = list(facebook_annotations, c())))),
list(
label = "Twitter",
method = "update",
args = list(list(visible = c(FALSE, TRUE)),
list(title = "Twitter",
annotations = list(c(), twitter_annotations)))))
)
)
fig <- df %>% plot_ly(type="scatter", mode="lines")
fig <- fig %>% add_lines(
data=df %>% filter(social=="Facebook"),
x=~days,
y=~yval,
color = ~grp,
hovertemplate = paste('%{x}', '<br>Hover text: %{text}<br>'),
text=~days
)
fig <- fig %>% add_lines(
data=df %>% filter(social=="Twitter"),
x=~days,
y=~yval,
color = ~grp,
hovertemplate = paste('%{x}', '<br>Hover text: %{text}<br>'),
text=~days,
visible=FALSE
)
fig <- fig %>% layout(title="Facebook",
xaxis=list(title=""),
yaxis = list(range = c(0, 1), title = "My Title"),
updatemenus=updatemenus)
fig
![Initial figure before interaction](https://i.stack.imgur.com/xIqqB.jpg)
![When I click the other](https://i.stack.imgur.com/gqrst.jpg)
Что мне не хватает? Это сводит меня с ума, я даже рассматриваю возможность добавления каждой группы в качестве отдельного следа, но это не очень практично, когда в моем конкретном примере 8 групп ...