Как реализовать граф уклона в R для двух переменных - PullRequest
0 голосов
/ 27 апреля 2018

Я анализирую, сколько пользователей использовали определенный хэштег и как они внесли свой вклад в общее количество твитов. Мои результаты:

Данные:

enter image description here

  • 20,68% твитов, связанных с #HashtagX, созданы 20 пользователями. Теперь эти 20 пользователей представляют только 0,001% от общего числа 14 432 пользователей, которые когда-либо использовали хэштег # HashtagX.
  • Что произойдет, если мы возьмем 100 лучших пользователей по количеству твитов? 44% твитов созданы топ-100 пользователями.
  • Если мы расширим список до 500 пользователей по количеству пользователей, мы увидим, что 72% твитов создаются топ-500.

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

1 Ответ

0 голосов
/ 29 апреля 2018

Одним из способов показать связь между обеими переменными («Пользователи» и «Твиты») является Диаграмма наклона.

Получена визуализация (решен график для вопроса):

Диаграмма наклона

1) Библиотеки

library(ggplot2)
library(scales)
library(ggrepel)
theme_set(theme_classic())

2) Пример данных

Country = c('20 accounts', '50 accounts', '100 accounts','200    accounts','300 accounts',
        '500 accounts','1000 accounts','14.443 accounts')
January = c(0.14, 0.34, 0.69,1.38,2.07,3.46,6.92,100)
April = c(20.68, 33.61, 44.94, 57.49,64.11,72,80,100)
Tweets_N = c(26797, 43547, 58211, 74472,83052,93259,103898,129529)


a = data.frame(Country, January, April)
left_label <- paste(a$Country, paste0(a$January,"%"),sep=" | ")
right_label <- paste(paste0(round(a$April),"%"),paste0(Tweets_N," tweets"),sep=" | ")
a$color_class <- "green"

3) Участок

 p <- ggplot(a) + geom_segment(aes(x=1, xend=2, y=January, yend=April, col=color_class), size=.25, show.legend=F) + 
geom_vline(xintercept=1, linetype="dashed", size=.1) + 
geom_vline(xintercept=2, linetype="dashed", size=.1) +
 scale_color_manual(labels = c("Up", "Down"), 
                 values = c("blue", "red")) +
 labs(
  x="", y = "Percentage") +
  xlim(.5, 2.5) + ylim(0,(1.1*(max(a$January, a$April))))  # X and Y axis limits

  # Add texts
  p <- p + geom_text_repel(label=left_label, y=a$January, x=rep(1,  NROW(a)), hjust=1.1, size=3.5,direction = "y")
  p <- p + geom_text(label=right_label, y=a$April, x=rep(2, NROW(a)), hjust=-0.1, size=3.5)
 p <- p + geom_text(label="Accounts", x=1, y=1.1*(max(a$January, a$April)), hjust=1.2, size=4, check_overlap = TRUE)  # title
 p <- p + geom_text(label="Tweeets (% of Total)", x=2, y=1.1*(max(a$January, a$April)), hjust=-0.1, size=4, check_overlap = TRUE)
 # title

 # Minify theme
 p + theme(panel.background = element_blank(), 
      panel.grid = element_blank(),

      axis.ticks = element_blank(),
      axis.text.x = element_blank(),
      panel.border = element_blank(),
      plot.margin = unit(c(1,2,1,2), "cm"))
...