visualization - 如何在 R 中为两个变量实现斜率图
问题描述
我正在分析有多少用户使用了特定的主题标签,以及他们对推文总数的贡献。我的结果是:
数据:
- 与#HashtagX 相关的推文中有 20.68% 是由 20 个用户创建的。现在,这 20 个用户只占曾经使用过 #HashtagX 标签的 14,432 个用户总数的 0.001%。
- 如果我们按推文数量计算前 100 位用户,会发生什么?44% 的推文是由前 100 名用户创建的。
- 如果我们将用户数量扩展到前 500 名用户,我们会发现 72% 的推文是由前 500 名创建的。
我想知道如何实现斜率图,因为我认为这是显示两个变量之间关系的好方法,但它不是为任何库提供的默认图。
解决方案
显示两个变量(“用户”与“推文”)之间关系的方法之一是斜率图。
获得的可视化(问题的解决图):
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"))
推荐阅读
- python - Python shutil.move 创建无法打开的文件夹
- sql - 如何对递归查询生成的板子进行排序
- ionic-framework - Ionic 5 纯 javascript 内联 ionFocus 事件
- python - 继续尝试修复 AttributeError,但无法解决
- mysql - 创建查询以选择从最贵到最便宜的所有设备
- javascript - 滚动上的动画“幻灯片”
- typescript - 间接返回值时,打字稿类型“字符串”不可分配给类型
- swiftui - swiftui 状态变量计数丢失了它存储的内容
- python - windows上的python权限被拒绝
- python - 从网站上的图表中抓取数据,只有将鼠标悬停在图表上才能看到