ggplot2 / plotly 让数字悬停在条形图上

ggplot2 / plotly get numbers to hover over bars

我已经阅读并尝试了我在此处可以找到的关于相关主题的所有内容,但没有任何帮助,或者我没有正确实施解决方案,所以我决定 post 一个问题。

应要求,这也是我的数据集:

structure(list(word = c("byalo", "cherno", "cherveno", "kafyavo", 
"lilavo", "oranzhevo", "rozovo", "sinyo", "sivo", "svetlolilavo"
), frequency = c(68L, 68L, 100L, 117L, 137L, 142L, 141L, 240L, 
92L, 57L)), row.names = c(NA, 10L), class = "data.frame")

这是我用来获取所需图形表示的代码:

geom_bar(width = 0.75,  stat = "identity", colour = "black", size = 1) + 
coord_polar(theta = "x") + xlab("") + ylab("") + 
ggtitle("Naming Task Word Frequency > 50") +
theme(legend.position = "none") + labs(x = NULL, y = NULL)


plotly::ggplotly(ggplot2::ggplot(Results, aes(x=word, y=frequency, fill=word)) + 
        geom_bar(width = 0.75, stat = "identity", colour = "black", size = 1) + xlab("") + ylab("") + 
        geom_text(aes(label=frequency)) + 
        ggtitle("Naming Task Word Frequency > 50") +  
        theme(legend.position = "none") + labs(x = NULL, y = NULL) + 
        theme(plot.subtitle = element_text(vjust = 1), plot.caption = element_text(vjust = 1), axis.text.x = element_text(angle = 90)) + 
        theme(panel.background = element_rect(fill = "honeydew1"), plot.background = element_rect(fill = "antiquewhite"))) %>% 
        config(displaylogo = F) %>% config(showLink = F)

这给了我以下结果:

我只想让数字正常悬停在条形图上。我尝试弄乱 vjust、hjust、dodge 和我在这里找到的其他建议,但结果要么相同,要么完全改变了我的图形形式。

P.S。我是初学者,我只需要对收集到的数据进行一些定量分析,并且只尝试学习我需要使用的东西。

P.S。 2 如果有人有时间回答,我也想知道,是否有办法选择我希望每个条形图的颜色。但我承认我还没有对这个问题做过研究。

其他人可能会做得更好,但我认为您有两个选择:

1) 忘掉情节吧。如果你只是做 ggplot() ,那么 vjust 参数就有效。当你添加 ggplotly 时,你失去了 vjust。

library(ggplot2)
ggplot(Results, aes(x=word, y=frequency, fill=word)) + 
    geom_bar(width = 0.75, stat = "identity", colour = "black", size = 1) + 
    xlab("") + ylab("") +
    geom_text(aes(label=frequency), vjust = -.5 ) +
    ggtitle("Naming Task Word Frequency > 50") +  
    theme(legend.position = "none") + labs(x = NULL, y = NULL) + 
    theme(plot.subtitle = element_text(vjust = 1), 
          plot.caption = element_text(vjust = 1), 
          axis.text.x = element_text(angle = 90)) + 
    theme(panel.background = element_rect(fill = "honeydew1"),
          plot.background = element_rect(fill = "antiquewhite")) 

2) 有计划地完成整个事情。您需要为注释提供一个列表,这有点复杂。 。我没有添加您为 ggplot 所做的其他布局 - 但这是一个开始:

library(plotly)
anns <- lapply(seq_along(Results$word), 
              function(i) {
                list(x = Results$word[i], y = Results$frequency[i], 
                     text = Results$frequency[i],
                     yanchor = "bottom", showarrow = FALSE)
              })

plot_ly(Results, x = ~word, y = ~frequency, type = 'bar') %>% 
  layout(annotations = anns)