今天搞直播,時間是晚上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看起來數據就多出來許多
代碼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])
上圖使用的數據為R語言自帶的數據包 mpg
另外一種解決辦法就是文章開頭提到的Counts Plot(計數圖),散點重疊的位置只畫一個點,用這個點的大小來代表這個位置重疊點的多少(there is more points overlap, the size of the circle gets bigger),如下:
代碼ggplot(mpg,aes(cty,hwy))+
geom_count(color="tomato3",show.legend = F)+theme_bw()+
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的平均值,明白了目標圖片傳達的含義,那麼作圖也有了思路:
整理數據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)
嘗試著添加標籤時遇到了問題暫時還不知道如何解決
同時還遇到了其他問題歡迎大家關注我的公眾號
小明的數據分析筆記本
小明的數據分析筆記本 公眾號 主要分享:1、R語言和python做數據分析和數據可視化的簡單小例子;2、園藝植物相關轉錄組學、基因組學、群體遺傳學文獻閱讀筆記;3、生物信息學入門學習資料及自己的學習筆記!