大数跨境
0
0

R语言ggplot2:计数图(Counts Plot)简单小例子

R语言ggplot2:计数图(Counts Plot)简单小例子 小明的数据分析笔记本
2021-03-27
0
导读:Counts Plot(计数图)的简单小例子

今天搞直播,时间是晚上7点到9点,今天没有准备推文,还是旧文重发。这应该是最开始写公众号的时候写的内容,转眼间2年多了。最开始写的的时候每篇推文基本都会遇到问题,现在回头看这些问题自己基本都能够解决了,这应该记笔记的一个好处吧:回首来时路,能够看见自己留下的每一个脚印!


前几天发现一个非常有意思的数据可视化小例子https://github.com/nanli-7/basketballdatavisualization,自带数据和代码,非常好的学习材料,自己重复了其中绝大部分内容,但是最后一幅非常漂亮的图没有找到对应的代码,自己也没有思路应该如何入手;今天刷知乎的时候发现了一篇文章 深度好文 |Matplotlib 可视化最有价值的 50 个图表(附完整 Python 源代码), 发现里面有一张图和自己没能画出来的非常像,才知道这类图叫计数图(Counts plot),但是印象里ggplot2好像没有现成的函数来做这个事情,在不知如何下手之际突然想到之前看过一篇文章Top 50 ggplot2 Visualizations - The Master List (With Full R Code), 应该会有对应的内容,果不其然,发现了 ggplot2 包中的 geom_count() 函数,以下内容记录自己重复计数图的代码

绘制散点图的时候如果数据较多会出现散点重叠的情况,这样图中展示的数据看起来会比实际数据显得少一些(The original data has 234 data points but the chart seems to display fewer points. This is because there are many overlaping points appearing as a single dot.)。那么如何解决这个问题呢?(So how to handle this?)其中一种解决办法是用 jitter plot (这个jitter自己也不知道如何翻译)来代替 Scatter plot(散点图)ggplot2 对应的函数为 geom_jitter(),他可以让重叠的点随机分布在原始位置的周围,width参数(argument)控制的应该是点距离原始位置的距离,通过两幅图片可以非常直观的看出差别

同样的数据集,图B看起来数据就多出来许多

代码

 
  1. library(ggplot2)

  2. library(ggpubr)

  3. p1<-ggplot(mpg,aes(cty,hwy))+

  4.  geom_point()+theme_bw()+

  5.  labs(title="Scatterplot with overlapping points",

  6.       caption = "Author: Mingyan")

  7. p2<-ggplot(mpg,aes(cty,hwy))+

  8.  geom_jitter(width=0.5,size=1)+

  9.  theme_bw()+labs(title="Jittered Points",caption="Author: Mingyan")

  10. ggarrange(p1,p2,ncol=2,labels=LETTERS[1:2])


上图使用的数据为R语言自带的数据包 mpg

另外一种解决办法就是文章开头提到的Counts Plot(计数图),散点重叠的位置只画一个点,用这个点的大小来代表这个位置重叠点的多少(there is more points overlap, the size of the circle gets bigger),如下:

代码

 
  1. ggplot(mpg,aes(cty,hwy))+

  2.  geom_count(color="tomato3",show.legend = F)+theme_bw()+

  3.  labs(title="Counts Plot",caption="Author: MingYan")

接下来重复开头提到的数据可视化教程里的图片

代码

df<-read.csv("../Desktop/data_analysis_practice/basketball_data_visualization-master/baseball_data.csv",header=T)

colnames(df)

ggplot(df,aes(height,avg))+

geom_count()+theme_bw()

按照以上的思路作图,发现结果和目标相差比较大,才意识到目标图片不是counts plot 目标图片是以惯用手和身高来分组计算击球率的平均值,点的大小反映的是HR的平均值,明白了目标图片传达的含义,那么作图也有了思路:

整理数据

 
  1. library(dplyr)

  2. df<-read.csv("../Desktop/data_analysis_practice/basketball_data_visualization-master/baseball_data.csv",header=T)

  3. colnames(df)

  4. df1<-df%>%

  5.  group_by(handedness,height)%>%

  6.  summarise(avg=mean(avg),n=n(),hr=mean(HR))

绘图

 
  1. ggplot(df1,aes(height,avg,color=handedness,size=hr))+

  2.  geom_point(alpha=0.8)+theme_bw()+

  3.  scale_color_manual(values=c("red","blue","darkgreen"))+

  4.  labs(x="Players' Height (inches)",

  5.       y= "Average of Players' Batting Performance (avg)",

  6.       title="Baseball Player Performance",

  7.       caption="Author:MingYan")+

  8.  scale_x_continuous(breaks=df1$height,labels=df1$height)

尝试着添加标签时遇到了问题暂时还不知道如何解决

同时还遇到了其他问题

  • 有两个图例如果想只删掉其中一个应该如何做?

  • aes中size参数控制点的大小,互相之间可能是按比例来的,并非是实际大小,如果想整体放大应该怎么做?突然想到scale_size是否可以,尝试了一下遇到点小问题,有时间再来探讨



欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!


【声明】内容源于网络
0
0
小明的数据分析笔记本
分享R语言和python在生物信息领域做数据分析和数据可视化的简单小例子;偶尔会分享一些组学数据处理相关的内容
内容 971
粉丝 0
小明的数据分析笔记本 分享R语言和python在生物信息领域做数据分析和数据可视化的简单小例子;偶尔会分享一些组学数据处理相关的内容
总阅读218
粉丝0
内容971