网站首页 > 技术文章 正文
今天的内容依然是来自《R for datascience》,目前已经看到了15.4了,每次遇到比较有意思的我自己不会的操作就会在这儿写下来,所以,如果你对我写的东西感兴趣的话,建议你去看原版书籍,顺便关注我一波。嘿嘿。
实例操练
这个例子使用的数据集为tidyverse包自带的数据集,大家可以使用?gss_cat查看相关变量,这儿不再赘述。
在数据可视化过程中改变因子顺序是一个经常性的操作,比如我们想看看不同religions的average number of hours spent watching TV per day有什么不同,我们可以用以下代码:
relig_summary <- gss_cat %>%
group_by(relig) %>%
summarise(
age = mean(age, na.rm = TRUE),
tvhours = mean(tvhours, na.rm = TRUE),
n = n()
)
ggplot(relig_summary, aes(tvhours, relig)) + geom_point()
运行代码得到输出的点图如下:
上面的这个点图其实很不好看,我们可能会觉得能不能把religions的顺序变一变,让有最小tvhours的religion在y轴的最下面,有最大tvhours的在最上面。
怎么做呢,需要用到fct_reorder()方法,这个方法取2个参数:
- 第一个就是你想改变顺序的因子,本例中:religions
- 第二个,改变顺序的参照物,本例中:tvhours
代码如下:
ggplot(relig_summary, aes(tvhours, fct_reorder(relig, tvhours))) +
geom_point()
可以看到,改变了religions的顺序后这个图就更加清晰明白了。
再看一个例子:
rincome_summary <- gss_cat %>%
group_by(rincome) %>%
summarise(
age = mean(age, na.rm = TRUE),
tvhours = mean(tvhours, na.rm = TRUE),
n = n()
)
ggplot(rincome_summary, aes(age, fct_reorder(rincome, age))) + geom_point()
上面的代码,可以画出按年龄排序后不同rincome和age的关系:
但是,问题出在按年龄排序后我们的收入(y轴)显得很乱,所以这个方法并不好,考虑到收入本来就是有顺序的,所以好的处理方法为保留收入的原始顺序,于是我们写出了如下代码:
rincome_summary <- gss_cat %>%
group_by(rincome) %>%
summarise(
age = mean(age, na.rm = TRUE),
tvhours = mean(tvhours, na.rm = TRUE),
n = n()
)
ggplot(rincome_summary, aes(age, rincome)) + geom_point()
这次再看我们的图,虽然其他的收入levels都排的挺好,但是我们不希望“Not applicable”排在第一。这个时候我们可以用fct_relevel(),它也有2个参数:
- 需要排序的因子,本例中:rincome
- 需要放在最前面的levels,本例中:Not applicable
代码如下:
ggplot(rincome_summary, aes(age, fct_relevel(rincome, "Not applicable"))) +
geom_point()
这一下,我们的图形就比较满意了。
再看一个例子:线图的颜色控制:
by_age <- gss_cat %>%
filter(!is.na(age)) %>%
count(age, marital) %>%
group_by(age) %>%
mutate(prop = n / sum(n))
ggplot(by_age, aes(age, prop, colour = marital)) +
geom_line(na.rm = TRUE)
ggplot(by_age, aes(age, prop, colour = fct_reorder2(marital, age, prop))) +
geom_line() +
labs(colour = "marital")
上面的代码画的是不同的年龄中婚姻状况的比例变化:
我们通过fct_reorder2实现了图例和x变量最大时y的值的顺序一致,可以更加明晰。
最后再看一个柱状图调整因子顺序的例子
下面的代码可以,正序逆序改变x轴标签:
gss_cat %>%
mutate(marital = marital %>% fct_infreq() ) %>%
ggplot(aes(marital)) +
geom_bar()
gss_cat %>%
mutate(marital = marital %>% fct_infreq() %>% fct_rev()) %>%
ggplot(aes(marital)) +
geom_bar()
大家可以在自己电脑上运行试试,关键就在于fct_rev()。
小结
今天通过3个例子给大家介绍了可视化中因子顺序的改变,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。
(站外链接发不了,请关注后私信回复“数据链接”获取本头条号所有使用数据)
往期内容:
猜你喜欢
- 2024-10-07 R语言实践问题与解决方法记录(一)
- 2024-10-07 R数据分析:使用R语言进行卡方检验
- 2024-10-07 R数据分析:如何用R做多重插补,实例操练
- 2024-10-07 R语言——关联规则(r语言关联规则分析)
- 2024-10-07 R语言数据质量分析(r语言数据分析步骤)
- 2024-10-07 R语言风险价值VaR(Value at Risk)和损失期望
- 2024-10-07 R语言——几个基础统计(r语言统计学)
- 2024-10-07 干货 | 超实用的【R语言与高级医学统计学】课程,科研人必备
- 2024-10-07 R语言中因子的创建与使用(r语言中因子指什么)
- 2024-10-07 协同过滤的R语言实现及改进(协同过滤算法改进)
- 1517℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 593℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 521℃MySQL service启动脚本浅析(r12笔记第59天)
- 489℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 488℃启用MySQL查询缓存(mysql8.0查询缓存)
- 476℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 456℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 453℃MySQL server PID file could not be found!失败
- 最近发表
-
- PS所有滤镜的说明(六)(ps滤镜详解)
- 5款小白也能用的在线图片编辑器!电商效率飙升就靠它!
- Java变量(java变量有什么作用)
- Java面试常见问题:Java注解(java中的面试题)
- Java编程入门第一课:HelloWorld(java编程从入门到实践)
- Java基础教程:Java继承概述(java里继承的概述)
- java基础之——访问修饰符(private/default/protected/public)
- 如何规划一个合理的JAVA项目工程结构
- 将机器指令翻译成 JavaScript -- 终极目标
- Web 服务器基准测试:Go vs. Node.js vs. Nim vs. Bun
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (81)
- es6includes (73)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- c++int转char (75)
- static函数和普通函数 (76)
- el-date-picker开始日期早于结束日期 (70)
- js判断是否是json字符串 (67)
- checkout-b (67)
- c语言min函数头文件 (68)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)