Необходимо получить несколько меток оси Y в rPlotly - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть график, где каждый второй столбец в кадре данных имеет метку оси Y слева и справа от оси Y.У меня есть рабочий график, если я не использую rplotly, но теперь я хочу сделать это в rplotly.

Ниже приведен код, который я пробовал, часть перед графиком работает, и именно так я хочу построить графиксмотреть.

library(plotly)
#this part works
x <- 1:10

# Generate 4 different sets of outputs
y1 <- runif(10, 0, 1)
y2 <- runif(10, 100, 150)
y3 <- runif(10, 1000, 2000)
y4 <- runif(10, 40000, 50000)
y5 <- runif(10, 0, 1)
y6 <- runif(10, 100, 200)
y <- data.frame(y1, y2, y3, y4, y5, y6)

# Colors for y[[2]], y[[3]], y[[4]] points and axes
colors = c("red", "blue", "green","orange","black","purple")
count <- length(names(y))
# Set the margins of the plot wider
par(oma = c(0, 2, 2, 3))

plot(x, y[[1]], yaxt = "n",ylab = "",type="l")
lines(x, y[[1]],col = colors[1])

# We use the "pretty" function go generate nice axes
axis(at = pretty(y[[1]]), side = 2, col = colors[1])

# The side for the axes so right left right left...
sides <- list(4, 2, 4, 2, 4) 

# The number of "lines" into the margin the axes will be
lines <- list(NA, 2, 2, 4, 4)

for(i in 2:count) {
  par(new = TRUE)
  plot(x, y[[i]], axes = FALSE, col = colors[i], xlab = "", ylab = "",type="l")
  axis(at = pretty(y[[i]]), side = sides[[i-1]], line = lines[[i-1]], 
    col = colors[i])
  lines(x, y[[i]], col = colors[i])
  legend("topright",legend = names(y),fill=colors)
}

###############################################################
#this is what I tried to get same outcome in rplotly
p <- plot_ly(y, y=y[[1]], x=x , type="scatter", mode="lines",color=colors[1],name=names(y[1]))

for(i in 2:count) {
  p<-add_trace(p, y=y[[i]], x=x , type="scatter", mode="lines",color=colors[i],name=names(y[i])) 
}
p

1 Ответ

0 голосов
/ 11 февраля 2019

Теперь я получил частичное решение для графика, однако мне все еще нужна ось y5, y6, потому что они находятся поверх другой оси y.Я думаю, что мне нужно изменить часть, position = "", но я не понял, какие цифры использовать.

Вот обновленный код ниже

library(plotly)
x <- 1:10

# Generate 4 different sets of outputs
y1 <- runif(10, 0, 1)
y2 <- runif(10, 100, 150)
y3 <- runif(10, 1000, 2000)
y4 <- runif(10, 40000, 50000)
y5 <- runif(10, 0, 1)
y6 <- runif(10, 100, 200)
y <- data.frame(y1, y2, y3, y4, y5, y6)


plot_ly(data = y, x = x, y = y$y1
    ,type = "scatter", mode = "lines", width = 1000, color = I("red")
    ,name = "name01") %>%
  add_trace(x = x, y = y$y2, yaxis = "y2", color = I("blue"), name = "name02") %>%
  add_trace(x = x, y = y$y3, yaxis = "y3", color = I("purple"), name = "name03") %>%
  add_trace(x = x, y = y$y4, yaxis = "y4", color = I("green"), name = "name04") %>%
  add_trace(x = x, y = y$y5, yaxis = "y5", color = I("orange"), name = "name05") %>%
  add_trace(x = x, y = y$y6, yaxis = "y6", color = I("yellow"), name = "name06") %>%

  layout(
    yaxis = list(
      showline = TRUE
      ,side = "left"
      ,anchor = "free"
      ,position = NA
      ,overlaying = NA
      ,color = "red"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,yaxis2 = list(
      showline = TRUE
      ,side = "right"
      ,anchor = "free"
      ,position = 1
      ,overlaying = "y"
      ,color = "blue"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,yaxis3 = list(
      showline = TRUE
      ,side = "left"
      ,anchor = NA
      ,position = NA
      ,overlaying = "y"
      ,color = "purple"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,yaxis4 = list(
      showline = TRUE
      ,side = "right"
      ,anchor = NA
      ,position = NA
      ,overlaying = "y"
      ,color = "green"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,yaxis5 = list(
      showline = TRUE
      ,side = "left"
      ,anchor = NA
      ,position = NA
      ,overlaying = "y"
      ,color = "orange"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,yaxis6 = list(
      showline = TRUE
      ,side = "right"
      ,anchor = NA
      ,position = NA
      ,overlaying = "y"
      ,color = "yellow"
      ,ticks = "outside"
      ,showgrid = FALSE
    )
    ,showlegend = TRUE
    ,margin = list(
      pad = 35, b = 60, l = 90, r = 200
    )
    ,legend = list(x=0,y=0,orientation = "h")

  )
...