首页 > 解决方案 > 使用 r 中的 plot_ly() 在折线图中的点上方显示文本标签

问题描述

我正在尝试使用ploy_ly()函数可视化折线图。我需要在折线图上方显示标签。但是标签显示在点上,看起来很乱。

使用的数据框如下:

  Quarter   average
1 2018 Q1     47.6
2 2018 Q2     46.4
3 2018 Q3     45.7
4 2018 Q4     45.5
5 2019 Q1     45.7
6 2019 Q2     46.3
7 2019 Q3     45.7

用于可视化折线图的代码plot_ly()如下:

plot_ly(teamAverageperweek, x = teamAverageperweek$Quarter,
                       text = teamAverageperweek$average,
                       hoverinfo = 'text',
                       hovertext = paste('Quarter of Date: ', teamAverageperweek$Quarter,
                                         '<br> Avg Hours Per Week: ',teamAverageperweek$average),
                       showlegend = FALSE)%>%
   add_trace(y = teamAverageperweek$average,
             type = 'scatter',
             mode = 'lines', 
             line = list(color = 'rgb(242,142,43)', 
                         width = 3)) %>%
   add_trace(x = teamAverageperweek$Quarter,
             y = teamAverageperweek$average,
             type = 'scatter',
             mode = 'markers', 
             marker = list(color = 'rgb(242,142,43)', 
                           size = 8)) %>%
   layout(
      yaxis = list(
       range = c(20,70),
       title = "Avg Hours Per Week"
     ) 
   ) %>%
  layout(hoverlabel = list(bgcolor= 'white')) %>%
  layout(showlegend = FALSE) %>%
  add_annotations(x = teamAverageperweek$Quarter,
                  y = teamAverageperweek$average,
                  text =  teamAverageperweek$average,
                  xref = "x",
                  yref = "y",
                  yanchor = 'center',
                  xanchor = 'top',
                  showarrow = FALSE)

是否可以在点上方显示文本标签?

提前致谢!!

标签: rdata-visualizationr-plotly

解决方案


是的,有可能,您可以使用textposition = "bottom center".

在这里您可以找到文本位置的选项。

好吧,我修改了你的代码,但我认为这样更具可读性。我希望它可以帮助你。

例如,您可以使用:

  • teamAverageperweek %>% plot_ly(...)安装的plot_ly(data = teamAverageperweek)

  • x = ~Quarter安装的teamAverageperweek$Quarter

  • 您只能使用一条迹线并设置mode = 'lines+markers+text'insted 添加 2 条迹线并使用annotations()

  • 您还可以设置layout(... , ...)用逗号分隔的所有参数。

这是您的代码,但已修改:

library(dplyr)
library(plotly)

# Yours data
teamAverageperweek = data.frame(
                        Quarter = c("2018 Q1","2018 Q2","2018 Q3","2018 Q4",
                                    "2019 Q1","2019 Q2","2019 Q3"),
                        average = c(47.6,46.4,45.7,45.5,
                                    45.7,46.3,45.7)
                        )
# The Plot
teamAverageperweek %>%
  plot_ly(x = ~Quarter,
        text = ~average,
        hoverinfo = 'text',
        hovertext = ~paste('Quarter of Date: ', Quarter,
                          '<br> Avg Hours Per Week: ',average),
        showlegend = FALSE)%>%
  add_trace(y = ~average,
            type = 'scatter',
            mode = 'lines+markers+text', 
            line = list(color = 'rgb(242,142,43)', 
                        width = 3),
            textposition = "bottom center", # here the text position
            marker = list(color = 'rgb(242,142,43)', 
                          size = 8)) %>%
  layout(
    yaxis = list(range = c(20,70),
                 title = "Avg Hours Per Week"
                 ),
    hoverlabel = list(bgcolor= 'white')
         )

这里的输出:

阴谋


推荐阅读