#r #plotly #r-plotly
#r #plotly #r-plotly
Вопрос:
В результате выполнения кода создается график plotly с одной точкой данных. Я разрабатываю этот график, чтобы иметь возможность отображать некоторую текстовую информацию, когда пользователи перемещают курсор мыши на точку данных, но, как показывает график, это не работает.
library(dplyr)
library(lubridate)
library(plotly)
a1 <- data.frame(
DateTime = ymd_hms("2020-01-01 08:00:00"),
Value = 1
)
a1 <- a1 %>%
mutate(DateTimeText = as.character(DateTime))
p1 <- plot_ly(a1, x = ~DateTime, y = ~Value, type = "scatter", mode = "markers",
text = ~DateTimeText,
hovertemplate = paste(
"<br>Date Time: %{text} </br>",
"<br>Value: %{y} </br>",
"<extra></extra>"))
Однако, если я предоставил две точки данных. Код работает. Вот пример. Это странно для меня, поскольку я думаю, что оба случая должны работать. Пожалуйста, дайте несколько советов.
a2 <- data.frame(
DateTime = ymd_hms(c("2020-01-01 08:00:00", "2020-01-02 08:00:00")),
Value = c(1, 2)
)
a2 <- a2 %>%
mutate(DateTimeText = as.character(DateTime))
p2 <- plot_ly(a2, x = ~DateTime, y = ~Value, type = "scatter", mode = "markers",
text = ~DateTimeText,
hovertemplate = paste(
"<br>Date Time: %{text} </br>",
"<br>Value: %{y} </br>",
"<extra></extra>"))
Ответ №1:
Проблема в том, что ваш вектор длины 1 в R неправильно преобразуется в массив JSON длиной 1. Это известная ошибка, поскольку при преобразовании объектов R в JSON возникает некоторая двусмысленность, см. https://plotly-r.com/json.html . Эта двусмысленность не возникает, когда у вас есть вектор длины> 1. Вот почему ваш код работает в таких случаях.
Чтобы решить эту проблему , используйте asIs
функцию или I
, т. е. Используйте text = ~I(DateTimeText)
. Попробуй это:
library(dplyr)
library(lubridate)
library(plotly)
a1 <- data.frame(
DateTime = ymd_hms("2020-01-01 08:00:00"),
Value = 1
)
a1 <- a1 %>%
mutate(DateTimeText = as.character(DateTime))
p1 <- plot_ly(a1, x = ~DateTime, y = ~Value, type = "scatter", mode = "markers",
text = ~I(DateTimeText),
hovertemplate = paste(
"<br>Date Time: %{text} </br>",
"<br>Value: %{y} </br>",
"<extra></extra>"))
p1