文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

R语言作图:如何在数据可视化过程中调整因子顺序

2024-12-24 16:33

关注

实例操练

这个例子使用的数据集为tidyverse包自带的数据集,大家可以使用?gss_cat查看相关变量,这儿不再赘述。

在数据可视化过程中改变因子顺序是一个经常性的操作,比如我们想看看不同religions的average number of hours spent watching TV per day有什么不同,我们可以用以下代码:

  1. relig_summary <- gss_cat %>% 
  2.   group_by(relig) %>% 
  3.   summarise( 
  4.     age = mean(age, na.rm = TRUE), 
  5.     tvhours = mean(tvhours, na.rm = TRUE), 
  6.     n = n() 
  7.   ) 
  8.  
  9. ggplot(relig_summary, aes(tvhours, relig)) + geom_point() 

运行代码得到输出的点图如下:

上面的这个点图其实很不好看,我们可能会觉得能不能把religions的顺序变一变,让有最小tvhours的religion在y轴的最下面,有最大tvhours的在最上面。

怎么做呢,需要用到fct_reorder()方法,这个方法取2个参数:

代码如下:

  1. ggplot(relig_summary, aes(tvhours, fct_reorder(relig, tvhours))) + 
  2.   geom_point() 

 

可以看到,改变了religions的顺序后这个图就更加清晰明白了。

再看一个例子:

  1. rincome_summary <- gss_cat %>% 
  2.   group_by(rincome) %>% 
  3.   summarise( 
  4.     age = mean(age, na.rm = TRUE), 
  5.     tvhours = mean(tvhours, na.rm = TRUE), 
  6.     n = n() 
  7.   ) 
  8.  
  9. ggplot(rincome_summary, aes(age, fct_reorder(rincome, age))) + geom_point() 

上面的代码,可以画出按年龄排序后不同rincome和age的关系:

但是,问题出在按年龄排序后我们的收入(y轴)显得很乱,所以这个方法并不好,考虑到收入本来就是有顺序的,所以好的处理方法为保留收入的原始顺序,于是我们写出了如下代码:

  1. rincome_summary <- gss_cat %>% 
  2.   group_by(rincome) %>% 
  3.   summarise( 
  4.     age = mean(age, na.rm = TRUE), 
  5.     tvhours = mean(tvhours, na.rm = TRUE), 
  6.     n = n() 
  7.   ) 
  8.  
  9. ggplot(rincome_summary, aes(age, rincome)) + geom_point() 

 

这次再看我们的图,虽然其他的收入levels都排的挺好,但是我们不希望“Not applicable”排在第一。这个时候我们可以用fct_relevel(),它也有2个参数:

代码如下:

  1. ggplot(rincome_summary, aes(age, fct_relevel(rincome, "Not applicable"))) + 
  2.   geom_point()

这一下,我们的图形就比较满意了。

再看一个例子:线图的颜色控制:

  1. by_age <- gss_cat %>% 
  2.   filter(!is.na(age)) %>% 
  3.   count(age, marital) %>% 
  4.   group_by(age) %>% 
  5.   mutate(prop = n / sum(n)) 
  6.  
  7. ggplot(by_age, aes(age, prop, colour = marital)) + 
  8.   geom_line(na.rm = TRUE
  9.  
  10. ggplot(by_age, aes(age, prop, colour = fct_reorder2(marital, age, prop))) + 
  11.   geom_line() + 
  12.   labs(colour = "marital"

上面的代码画的是不同的年龄中婚姻状况的比例变化:

 

我们通过fct_reorder2实现了图例和x变量最大时y的值的顺序一致,可以更加明晰。

最后再看一个柱状图调整因子顺序的例子

下面的代码可以,正序逆序改变x轴标签:

  1. gss_cat %>% 
  2.   mutate(marital = marital %>% fct_infreq() ) %>% 
  3.   ggplot(aes(marital)) + 
  4.     geom_bar() 
  5.  
  6. gss_cat %>% 
  7.   mutate(marital = marital %>% fct_infreq() %>% fct_rev()) %>% 
  8.   ggplot(aes(marital)) + 
  9.     geom_bar() 

大家可以在自己电脑上运行试试,关键就在于fct_rev()。

小结

今天通过3个例子给大家介绍了可视化中因子顺序的改变,感谢大家耐心看完。发表这些东西的主要目的就是督促自己,希望大家关注评论指出不足,一起进步。内容我都会写的很细,用到的数据集也会在原文中给出链接,你只要按照文章中的代码自己也可以做出一样的结果,一个目的就是零基础也能懂,因为自己就是什么基础没有从零学Python和R的,加油。

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯