ggplot2 / plotly получает числа, чтобы парить над барами - PullRequest
0 голосов
/ 13 сентября 2018

Я уже прочитал и перепробовал все, что смог найти здесь по рассматриваемой теме, но ничего не помогло, или я не правильно внедряю решения, поэтому решил опубликовать вопрос.

В соответствии с запросом, вот и мой набор данных:

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)

Какойдает мне следующий результат:

bar graph

Я бы просто хотел, чтобы числа нормально парили над столбиками.Я попытался поиграться с vjust, hjust, dodge и другими предложениями, которые я нашел здесь, но результат был либо такой же, либо полностью изменил форму моего графика.

PS Я новичок, мне просто нужныдля некоторого количественного анализа данных, которые я собрал и пытаюсь изучить только то, что мне нужно будет использовать.

PS 2 Если у кого-то есть время ответить, я также хотел бы знать, есть ли способ выбрать цвет, которым я хочу, чтобы каждая полоска была.Но я признаю, что я еще не исследовал этот вопрос.

1 Ответ

0 голосов
/ 13 сентября 2018

Кто-то может быть лучше, но, как я вижу, у вас есть два варианта:

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")) 

enter image description here

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)

enter image description here

...