R Plotly - добавить аннотацию к опорной линии в графике рассеяния

Я создал диаграмму рассеяния с помощью Plotly в R, используя набор данных радужной оболочки, и добавил две опорные линии, одну на оси x, обозначающую среднее значение Sepal.Width, а другую на оси y, обозначающую среднее значение Sepal.Length.

Ниже приведен исполняемый код R:

library(dplyr)
library(plotly) 

iris <- datasets::iris

scatterplot <- plot_ly(data = iris, x = ~Sepal.Width, y = ~Sepal.Length, type = 'scatter',
                       text = ~Species,
                       color = I('orange')) %>%
               layout(shapes=list(list(type = 'line', 
                                     x0 = mean(iris$Sepal.Width), 
                                     x1 = mean(iris$Sepal.Width),
                                     y0 = 4, 
                                     y1 = 8, 
                                     line = list(width = 2)),
                                list(type = 'line', 
                                     x0 = 1.5, 
                                     x1 = 5, 
                                     y0 = mean(iris$Sepal.Length), 
                                     y1 = mean(iris$Sepal.Length), 
                                     line = list(width = 2))))

scatterplot

Приведенный выше код R создает следующий вывод Plotly

Я хочу добавить текст аннотации (т. Е. Метку) для двух опорных линий ("Средняя ширина сепалы" и "Средняя длина сепалы").

Я сталкивался с подобным сообщением, однако упомянутое там решение не работало для меня. Если кто-то может предоставить мне решение с кодом, то это будет высоко оценено.

PS: я использую Plotly версии 4.8.0

1 ответ

Следующий код решил мою проблему. Надеюсь, это поможет кому-то.

library(dplyr)
library(plotly)

iris <- datasets::iris

scatter <- plot_ly(data = iris, x = ~Sepal.Width, y = ~Sepal.Length, type = 'scatter',
                   text = ~Species,
                   color = I('orange')) %>%
              layout(shapes=list(list(type = 'line', 
                                        x0 = mean(iris$Sepal.Width), 
                                        x1 = mean(iris$Sepal.Width),
                                        y0 = 4, 
                                        y1 = 8, 
                                        line = list(width = 2)),
                                  list(type = 'line', 
                                        x0 = 1.5, 
                                        x1 = 5, 
                                        y0 = mean(iris$Sepal.Length), 
                                        y1 = mean(iris$Sepal.Length), 
                                        line = list(width = 2))), 
                                  annotations = list(list( 
                                            x = 3.4,
                                            y = 7.9,
                                            xref = 'x',
                                            yref = 'y',
                                            text = 'Mean Sepal Width',
                                            showarrow = FALSE
                                          ),
                                            list( 
                                              x = 4.7,
                                              y = 5.6,
                                              xref = 'x',
                                              yref = 'y',
                                              text = 'Mean Sepal Length',
                                              showarrow = FALSE
                                            )))      
scatter
Другие вопросы по тегам