日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2

發(fā)布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 長數(shù)據(jù)是什么鬼?

之前介紹了如何將多個性狀的箱線圖放在一個圖上,比如learnasreml包中的fm數(shù)據(jù),它有h1~h5五年的株高數(shù)據(jù),想對它進(jìn)行作圖。

「數(shù)據(jù)預(yù)覽:」

>?library(learnasreml)
>?data(fm)
>?head(fm)
??TreeID?Spacing?Rep???Fam?Plot????dj????dm????wd?h1??h2??h3??h4??h5
1??80001???????3???1?70048????1?0.334?0.405?0.358?29?130?239?420?630
2??80002???????3???1?70048????2?0.348?0.393?0.365?24?107?242?410?600
3??80004???????3???1?70048????4?0.354?0.429?0.379?19??82?180?300?500
4??80005???????3???1?70017????1?0.335?0.408?0.363?46?168?301?510?700
5??80008???????3???1?70017????4?0.322?0.372?0.332?33?135?271?470?670
6??80026???????3???1?70002????2?0.359?0.450?0.392?30?132?258?390?570

這里,相對h1,h2,h3,h4,h5這五個性狀進(jìn)行作圖,我們可以將其轉(zhuǎn)化為「長數(shù)據(jù)」

問題來了,什么是「長數(shù)據(jù)」,什么是「寬數(shù)據(jù)」(不是短數(shù)據(jù),這不是反義詞,謝謝)

「寬數(shù)據(jù):」

?

即變量是多列數(shù)據(jù),每一列都是一個值,比如株高數(shù)據(jù),第一年的株高是一列,第二年的株高是一列,第三年的株高是一列,這些數(shù)據(jù)就是寬數(shù)據(jù)。

?ID2018height2019height2020heightt
ID001121418
ID002111419
ID003141516

「長數(shù)據(jù):」

?

即變量是,數(shù)據(jù)都在一列,比如株高數(shù)據(jù),第一列是ID,第二列是年份,第三列是株高,這種數(shù)據(jù)叫長數(shù)據(jù)。

?ID年份株高
ID001201812
ID001201914
ID001202018
ID002201811
ID002201914
ID002202019
ID003201814
ID003201915
ID003202016

「tidyverse」系列包,喜歡長數(shù)據(jù),無論是清洗數(shù)據(jù),還是匯總統(tǒng)計,還是ggplot2可視化,都喜歡長數(shù)據(jù)。

?

飛哥注:我今天明白了這個道理,即tidyverse系列喜歡長數(shù)據(jù),感覺打開了任督二脈,對于數(shù)據(jù)處理又有了新的理解。

?

2. 怎么轉(zhuǎn)化為長數(shù)據(jù)

我知道三種方法:

  • reshape2的melt函數(shù),現(xiàn)在還知道這個包的人,R齡應(yīng)該在5年以上了,反正我一直都用,很好用,但是被作者嫌棄了,現(xiàn)在被很多人嫌棄了……
  • data.table的metlt函數(shù),和reshape2包的函數(shù)同名,用法也相似,可以對DT數(shù)據(jù)處理,很快。現(xiàn)在我用melt函數(shù)時,就不用載入reshape2了,直接用data.table包就行
  • tidyverse中的tidyr中的pivot_longer函數(shù),這個更簡單,用過這個函數(shù),再也沒有迷路過。因為melt函數(shù)語法比較復(fù)雜,經(jīng)常需要查看幫助文檔或者以前的筆記。

看一下最簡單的方法吧,看一下數(shù)據(jù):

>?dd?=?fm[,c(1,9:13)]
>?head(dd)
??TreeID?h1??h2??h3??h4??h5
1??80001?29?130?239?420?630
2??80002?24?107?242?410?600
3??80004?19??82?180?300?500
4??80005?46?168?301?510?700
5??80008?33?135?271?470?670
6??80026?30?132?258?390?570

然后用pivot_longer函數(shù),將其轉(zhuǎn)化為長數(shù)據(jù):

>?re?=?dd?%>%?pivot_longer(.,-1,names_to?=?"Year",values_to?=?"Height")?
>?head(re)
#?A?tibble:?6?x?3
??TreeID?Year??Height
??????
1?80001??h1????????29
2?80001??h2???????130
3?80001??h3???????239
4?80001??h4???????420
5?80001??h5???????630
6?80002??h1????????24

代碼解釋:

  • 我用了管道符%/%,將數(shù)據(jù)傳遞給pivot_longer
  • 第二個-1,意思是除了第一個不處理,其它都處理,也可以用2:6表示第二到第六列處理
  • 第三個names_to是變量的名稱,這里定義為Year
  • 第四個values_to是保存的性狀名,這里是Height

可以看到,長數(shù)據(jù)有3列,分別是:

  • TreeID
  • Year
  • Height

3. ggplot2作圖怎么搞

之前我使用ggplot2作圖時,想做什么圖,就在網(wǎng)上copy代碼,然后根據(jù)自己的數(shù)據(jù)名稱,修改代碼,然后運(yùn)行代碼。一次性代碼,用過就忘,半吊子水平,一直很穩(wěn)定。

當(dāng)我知道了ggplot2用長數(shù)據(jù)之后,又是另一種理解:

library(ggplot2)
re?%>%?ggplot(.,aes(x?=?Year,?y?=?Height,?colour?=?Year))?+?geom_boxplot()

先看圖片:

成功了,圖片比較滿意,第一個是h1的株高,第二個是h2的株高,依次類推。但是代碼是什么意思呢?

我看了ggplot2的入門,畫圖分為三個部分:

  • 數(shù)據(jù)在哪里:re是數(shù)據(jù)
  • x軸,y軸在哪里:x軸是Year,y軸是Height
  • 畫什么類型的圖:這里是箱線圖,所以是geom_boxplot

「如果是畫分組散點(diǎn)圖:」

re?%>%?ggplot(.,aes(x?=?Year,?y?=?Height,?colour?=?Year))?+?geom_point()

「如果是畫分組分散的散點(diǎn)圖:」

re?%>%?ggplot(.,aes(x?=?Year,?y?=?Height,?colour?=?Year))?+?geom_jitter()

4. 所以散點(diǎn)圖和箱線圖結(jié)合呢?

直接用+連接就行了,感覺到了畫家作圖的快樂,算是丫丫學(xué)徒吧,哈哈

re?%>%?ggplot(.,aes(x?=?Year,?y?=?Height,?colour?=?Year))?+??geom_jitter()?+?geom_boxplot()

5. 感受

所以,這就是學(xué)習(xí)的快樂了!

R語言進(jìn)階筆記1 | 深挖一門語言的必要性

總結(jié)

以上是生活随笔為你收集整理的ggplot2箱式图两两比较_R语言进阶笔记2 | 长数据与ggplot2的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。