Несколько осей Y, используя график с данными различной длины - PullRequest
0 голосов
/ 09 марта 2020

При использовании графика у меня часто возникали проблемы с многострочным графиком и данными разной длины. Тогда я нашел это решение:


library(plotly)

df1 <- data.frame(
  id = c("Honda", "Honda", "Honda", "Merc", "Merc", "Merc", "Toyota", "Toyota"),
  date = c('10/30/12', '10/31/12', '11/1/12', '11/2/12', '10/30/12', '10/31/12', '11/1/12', '11/3/12'),
  Value = c(2, 3, 3, 4, 1, 2, 3, 2)
)

df1$date <- as.Date(df1$date, "%m/%d/%y")

df1 %>%
  group_by(id) %>%
  plot_ly(x=~date, y=~Value, type='scatter', color=~id, mode="lines+markers") %>%
  layout(xaxis=list(title="Date"),yaxis=list(title="Cars Sold"))

Теперь я столкнулся со следующей проблемой. Как я могу добавить несколько осей Y к этому примеру? Кроме того, возможно ли иметь более 2 осей y, используя R, и расположить их влево и вправо, как в этом Python примере в самом низу страницы? Например, Хонда и Мер c слева, Тойота справа. Я нашел решение здесь , но данные имеют одинаковую длину, поэтому это не работает для меня.

Я хочу предотвратить масштабирование данных с другим порядком величины, как в этом фрейм данных:

df1 <- data.frame(
  id = c("Honda", "Honda", "Honda", "Merc", "Merc", "Merc", "Toyota", "Toyota"),
  date = c('10/30/12', '10/31/12', '11/1/12', '11/2/12', '10/30/12', '10/31/12', '11/1/12', '11/3/12'),
  Value = c(0.02, 0.03, 0.03, 4, 1, 2, 3, 2)
)

1 Ответ

0 голосов
/ 10 марта 2020

Пожалуйста, проверьте следующее:

library(plotly)

df1 <- data.frame(
  id = c("Honda", "Honda", "Honda", "Merc", "Merc", "Merc", "Toyota", "Toyota"),
  yaxis = c("y", "y", "y", "y2", "y2", "y2", "y3", "y3"),
  date = c('10/30/12', '10/31/12', '11/1/12', '11/2/12', '10/30/12', '10/31/12', '11/1/12', '11/3/12'),
  Value = c(0.02, 0.03, 0.03, 4, 1, 2, 3, 2)
)

df1$date <- as.Date(df1$date, "%m/%d/%y")

y2 <- list(
  tickfont = list(color = "red"),
  overlaying = "y",
  side = "left",
  title = "Merc",
  position=0.1,
  showgrid = FALSE
)

y3 <- list(
  tickfont = list(color = "green"),
  overlaying = "y",
  side = "right",
  title = "Toyota",
  showgrid = FALSE
)

df1 %>%
  group_by(id) %>%
  plot_ly(x=~date, y=~Value, type='scatter', color=~id, mode="lines+markers", yaxis=~yaxis) %>%
  layout(xaxis=list(title="Date", domain = list(0.15, 0.95)), yaxis=list(title="Honda"), yaxis2=y2, yaxis3=y3)

Result

Для получения дополнительной информации см. это .

...