Положение заголовка над площадью участка в R plotly - PullRequest
0 голосов
/ 10 января 2019

У меня есть plotly график, где заголовок размещен в области графика по умолчанию. Я хотел бы изменить это, чтобы иметь название за пределами области заговора.

enter image description here

На скриншоте заголовок находится в «области графика» (светло-серый), я бы хотел, чтобы он был выше области графика.

Мой текущий код имеет только аргумент title на графике layout:

plt <- plt %>% 
layout(
    title = sprintf('Ice-formation Risk <br>%s', 
                    format(Sys.time(),format = '%d %b %Y %H:%M %Z')))

Я попытался поиграть с некоторыми параметрами, указанными в plotly ссылка , но безуспешно:

plt <- plt %>% 
layout(
  title = list(
    text = sprintf('Ice-formation Risk <br>%s', 
                   format(Sys.time(),format = '%d %b %Y %H:%M %Z')),
    xref = 'paper', yref = 'paper',
    color = 'rgb(17,17,17)'
  )
)

В тот момент, когда я меняю атрибут title со строки на list, заголовок графика исчезает. Я экспериментировал с удалением параметров xref и yref и оставлял только атрибут text с тем же результатом.

Пример кода

plot1 <- plot_ly(iris) %>% 
  layout(
    title = list(
      text = 'sample plot', xref = 'x', yref = 'y', x = 0.5, y = 1, color = 'rgb(217,83,79)'
    ),
    margin = list( pad = 50, b = 90, l = 130, r = 50 ),
    yaxis = list(
      showline = F, side = 'left', title = 'Axis1', color = 'black', 
      overlaying = 'y3', zeroline = F
    ),
    yaxis2 = list(
      tickfont = list(color = "black"), showline = F, overlaying = "y3", side = "right",
      title = "Axis2", zeroline = F, anchor = 'free', position = 1
    ),
    yaxis3 = list(
      tickfont = list(color = "black"), side = "left", title = "Axis3", 
      zeroline = F, anchor = 'free'
    )
  ) %>% 
  add_trace(x = ~Sepal.Width, y = ~Sepal.Length, name = 'Sepal Length', color = ~Species,
            type = 'scatter', mode = 'markers') %>% 
  add_trace(x = ~Sepal.Width, y = ~Petal.Length, name = 'Petal Length', color = ~Species,
            type = 'scatter', mode = 'markers', yaxis = 'y2') %>% 
  add_trace(x = ~Sepal.Width, y = ~Petal.Width, name = 'Petal Width', color = ~Species,
            type = 'scatter', mode = 'markers', yaxis = 'y3')

Сюжет title все еще исчезает. У меня там три оси Y, потому что на моем графике должно быть три. Значения margin были "подправлены", чтобы метки осей отображались правильно, иначе они перекрываются и не читаются.

enter image description here

Ответы [ 2 ]

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

Вы не сможете использовать title.text, пока пакет R не обновится до plotly.js 1.43 или выше

https://github.com/plotly/plotly.js/releases/tag/v1.43.0

https://github.com/ropensci/plotly/pull/1450

0 голосов
/ 10 января 2019

Это действительно странно. Обычно ссылка довольно точная. Я отправил вопрос на Github . Тем более что документация на сайте проекта все еще использует title="some string".

В любом случае, на данный момент я рекомендую вам использовать опцию annotations. Этот работает так, как описано в ссылке;) Это что-то вроде хака. Если вы поставите yshift слишком высоко, он ускользнет. Надеюсь, это поможет в любом случае:

plot_ly(iris) %>%
  add_trace(x = ~Sepal.Width, y = ~Sepal.Length, name = 'Sepal Length', color = ~Species,
            type = 'scatter', mode = 'markers') %>% 
  add_trace(x = ~Sepal.Width, y = ~Petal.Length, name = 'Petal Length', color = ~Species,
            type = 'scatter', mode = 'markers', yaxis = 'y2') %>%
  add_trace(x = ~Sepal.Width, y = ~Petal.Width, name = 'Petal Width', color = ~Species,
            type = 'scatter', mode = 'markers', yaxis = 'y3') %>%
  layout(
       margin = list( pad = 50, b = 90, l = 130, r = 50 ),
    yaxis = list(
      showline = F, side = 'left', title = 'Axis1', color = 'black' ,
      overlaying = 'y3', zeroline = F
    ),
    yaxis2 = list(
      tickfont = list(color = "black"), showline = F, overlaying = "y3", side = "right",
      title = "Axis2", zeroline = F, anchor = 'free', position = 1
    ),
    yaxis3 = list(
      tickfont = list(color = "black"), side = "left", title = "Axis3",
      zeroline = F, anchor = 'free'
    ),annotations=list(text="sample text",xref="paper",x=0.5,
                      yref="paper",y=1,yshift=30,showarrow=FALSE, 
                      font=list(size=24,color='rgb(217,83,79)'))
  )

выглядит так: enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...