数据-R语言-图表-决策-Linux-Pythonggplot2R语言做生信

ggplot2:Counts Plot(计数图)

2019-02-02  本文已影响19人  小明的数据分析笔记本

前几天发现一个非常有意思的数据可视化小例子https://github.com/nanli-7/basketball_data_visualization,自带数据和代码,非常好的学习材料,自己重复了其中绝大部分内容,但是最后一幅非常漂亮的图没有找到对应的代码,自己也没有思路应该如何入手;今天刷知乎的时候发现了一篇文章 深度好文 |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)控制的应该是点距离原始位置的距离,通过两幅图片可以非常直观的看出差别

Rplot19.png

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

代码

library(ggplot2)
library(ggpubr)
p1<-ggplot(mpg,aes(cty,hwy))+
  geom_point()+theme_bw()+
  labs(title="Scatterplot with overlapping points",
       caption = "Author: Mingyan")
p2<-ggplot(mpg,aes(cty,hwy))+
  geom_jitter(width=0.5,size=1)+
  theme_bw()+labs(title="Jittered Points",caption="Author: Mingyan")
ggarrange(p1,p2,ncol=2,labels=LETTERS[1:2])
另外一种解决办法就是文章开头提到的Counts Plot(计数图),散点重叠的位置只画一个点,用这个点的大小来代表这个位置重叠点的多少(there is more points overlap, the size of the circle gets bigger),如下: Rplot20.png

代码

ggplot(mpg,aes(cty,hwy))+
  geom_count(color="tomato3",show.legend = F)+theme_bw()+
  labs(title="Counts Plot",caption="Author: MingYan")
接下来重复开头提到的数据可视化教程里的图片
Rplot21.png

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

整理数据

library(dplyr)
df<-read.csv("../Desktop/data_analysis_practice/basketball_data_visualization-master/baseball_data.csv",header=T)
colnames(df)
df1<-df%>%
  group_by(handedness,height)%>%
  summarise(avg=mean(avg),n=n(),hr=mean(HR))

绘图

ggplot(df1,aes(height,avg,color=handedness,size=hr))+
  geom_point(alpha=0.8)+theme_bw()+
  scale_color_manual(values=c("red","blue","darkgreen"))+
  labs(x="Players' Height (inches)",
       y= "Average of Players' Batting Performance (avg)",
       title="Baseball Player Performance",
       caption="Author:MingYan")+
  scale_x_continuous(breaks=df1$height,labels=df1$height)
Rplot22.png

遇到的问题:尝试添加图例时不知道为什么成了下图的样子

Rplot23.png

同时还遇到了其他问题

以上内容同步更新在微信公众号 小明的数据分析笔记本,欢迎关注!

公众号二维码.jpg
上一篇下一篇

猜你喜欢

热点阅读