Измените отображение aestheti c в ggplot2 для получения правильной легенды сюжета - PullRequest
1 голос
/ 20 января 2020

У меня есть ggplot2 диаграмма, которую я хочу визуализировать с plotly. Переменные x и y получены из символьной переменной, как в примере ниже:

library(ggplot2)
library(plotly)
dset <- data.frame(x =  runif(10), y = runif(10))
head(dset)
#>            x         y
#> 1 0.45902147 0.9842178
#> 2 0.04331170 0.8337590
#> 3 0.02202882 0.8607866
#> 4 0.27971306 0.4250171
#> 5 0.35531015 0.7182533
#> 6 0.61235609 0.9905286

# vars for x and y aesthetics
varx <- "x"
vary <- "y"

# ggplot2 chart
p <-
  ggplot(dset, aes(get(varx), get(vary))) + xlab(varx) + ylab(vary) + geom_point()

# convert to plotly
ggplotly(p)

Выход plotly отображает get(varx) во всплывающей подсказке, и я хотел бы, чтобы она отображалась x. Я полагаю, что текст унаследован от отображения эстетики c.

print(p[[4]])
#> Aesthetic mapping: 
#> * `x` -> `get(varx)`
#> * `y` -> `get(vary)`

Создано в 2020-01-20 пакетом Представление (v0.3.0)

Есть ли способ изменить отображение эстетики c перед преобразованием диаграммы в plotly? Если нет, то какой самый простой способ изменить всплывающую подсказку в plotly?

1 Ответ

1 голос
/ 20 января 2020

РЕДАКТИРОВАТЬ:

Просто используйте aes_string() вместо aes(). Первый требует явного цитирования входных данных (вместо стандартной оценки, используемой aes)

p <- ggplot(dset, aes_string(varx, vary)) + 
  xlab(varx) + 
  ylab(vary) + 
  geom_point()


ggplotly(p)

Оригинальный ответ:

Мне удалось сделать это после этой страницы: https://plot.ly/r/hover-text-and-formatting/, но вы должны построить сюжет с помощью функции plot_ly(). Это больше кода, но у вас больше контроля над внешним видом сюжета. Оттуда вы можете вставить переменные внутри hovertemplate() и layout() для подсказок и меток осей.

dset %>% 
  plot_ly() %>% 
  add_trace(
    type = 'scatter',
    mode = 'markers',
    x = ~get(varx),
    y = ~get(vary),
    hovertemplate = paste(
      paste(varx,": %{x:.f}<br>"),
      paste(vary,": %{y:.f}<br>")
      )
  ) %>% 
  layout(xaxis = list(title = paste(varx)),
         yaxis = list(title = paste(vary)))

enter image description here

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