r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库
騰訊課堂 | Python網(wǎng)絡(luò)爬蟲(chóng)與文本數(shù)據(jù)分析
同樣的基本作圖任務(wù),plotnine比matplotlib和seaborn代碼量少,更美觀。所以我又重新發(fā)一遍,大家可以先收藏起來(lái),后面總有用到的時(shí)候~
R語(yǔ)言的ggplot2繪圖能力超強(qiáng),python雖有matplotlib,但是語(yǔ)法臃腫,使用復(fù)雜,入門極難,seaborn的出現(xiàn)稍微改善了matplotlib代碼量問(wèn)題,但是定制化程度依然需要借助matplotlib,使用難度依然很大。
而且咱們經(jīng)管專業(yè)學(xué)編程語(yǔ)言,一直有一個(gè)經(jīng)久不衰的問(wèn)題-“學(xué)數(shù)據(jù)分析,到底選擇R還是Python”。通過(guò)plotnine這個(gè)庫(kù),你就可以在python世界中體驗(yàn)下R語(yǔ)言的新奇感,體驗(yàn)可視化之美,如果著迷上癮,再學(xué)R也不遲。
plotnine包,可以實(shí)現(xiàn)絕大多數(shù)ggplot2的繪圖功能,兩者語(yǔ)法十分相似,R和Python的語(yǔ)法轉(zhuǎn)換成本大大降低。
- plotnine文檔 https://plotnine.readthedocs.io/en/latest/
- R語(yǔ)言ggplot2文檔 https://ggplot2.tidyverse.org/reference/index.html
安裝
pip?install?plotnine準(zhǔn)備數(shù)據(jù)
from?plotnine.data?import?mpg#dataframe
mpg.head()
| audi | a4 | 1.8 | 1999 | 4 | auto(l5) | f | 18 | 29 | p | compact |
| audi | a4 | 1.8 | 1999 | 4 | manual(m5) | f | 21 | 29 | p | compact |
| audi | a4 | 2.0 | 2008 | 4 | manual(m6) | f | 20 | 31 | p | compact |
| audi | a4 | 2.0 | 2008 | 4 | auto(av) | f | 21 | 30 | p | compact |
| audi | a4 | 2.8 | 1999 | 6 | auto(l5) | f | 16 | 26 | p | compact |
快速作圖qplot
我們先直接看最簡(jiǎn)單好用的快速作圖函數(shù)qplot(x, y, data)
- 橫坐標(biāo)displ
- 縱坐標(biāo)cty
- 數(shù)據(jù)mpg
qplot(x='displ',?
??????y='cty',
??????data=mpg)
ggplot圖層
qplot是快速作圖函數(shù),如果想讓圖更好看,進(jìn)行私人訂制,那么我們需要進(jìn)行圖層設(shè)計(jì)
首先設(shè)置ggplot圖層(相當(dāng)于買了一個(gè)高級(jí)畫(huà)布),
- 數(shù)據(jù)mpg
- 橫坐標(biāo)x軸為displ
- 縱坐標(biāo)y軸cty
在plotnine中,變量所對(duì)應(yīng)的數(shù)據(jù)均可通過(guò)字段名調(diào)用
from?plotnine?import?ggplot,?geom_point,?aesggplot(aes(x='displ',?y='cty'),?mpg)
圖層疊加
我們可以看到,已經(jīng)繪制出一個(gè)空的ggplot圖層,x軸為displ,y軸為cty。
接下來(lái)我們給這個(gè)圖層上加上數(shù)據(jù)對(duì)應(yīng)的散點(diǎn),使用geom_point()直接追加在ggplot圖層之上即可。
(????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point()
)
color
在上圖中,散點(diǎn)是沒(méi)有區(qū)分每輛車的氣缸數(shù)cyl。
在geom_point()中,我們可以按照氣缸數(shù)cyl分門別類,按照顏色顯示出來(lái)
(????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='cyl'))
)
上圖挺好看的,有時(shí)候需要繪制的字段是離散型數(shù)值,但是上色后可能不夠明顯,需要聲明該字段為離散型。這時(shí)候用factor()來(lái)告訴plotnine,這個(gè)字段是離散型數(shù)值
(????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='factor(cyl)'))?
)
size
有時(shí)候?yàn)榱嗽黾涌梢暬@示的維度數(shù),還可以考慮加入點(diǎn)的大小size
(????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(size='hwy'))
)
梯度色
如果你想自己設(shè)置顏色的梯度,可以通過(guò)scale_color_gradient設(shè)置
from?plotnine?import?scale_color_gradient(
????ggplot(aes(x='displ',?y='cty'),?mpg)
????+?geom_point(aes(color='hwy'))
????+?scale_color_gradient(low='blue',?high='red')
)
條形圖
plotnine中可繪制的圖有很多,剛剛已經(jīng)講了散點(diǎn)圖,接下來(lái)我們看看plotnine中的條形圖。
首先準(zhǔn)備一下數(shù)據(jù)
import?pandas?as?pddf?=?pd.DataFrame({
????'variable':?['gender',?'gender',?'age',?'age',?'age',?'income',?'income',?'income',?'income'],
????'category':?['Female',?'Male',?'1-24',?'25-54',?'55+',?'Lo',?'Lo-Med',?'Med',?'High'],
????'value':?[60,?40,?50,?30,?20,?10,?25,?25,?40],
})
df['variable']?=?pd.Categorical(df['variable'],?categories=['gender',?'age',?'income'])
df['category']?=?pd.Categorical(df['category'],?categories=df['category'])
df
| gender | Female | 60 |
| gender | Male | 40 |
| age | 1-24 | 50 |
| age | 25-54 | 30 |
| age | 55+ | 20 |
| income | Lo | 10 |
| income | Lo-Med | 25 |
| income | Med | 25 |
| income | High | 40 |
#調(diào)整文本位置
dodge_text?=?position_dodge(width=0.9)??????????????????????????????#?new
(
????ggplot(df,?aes(x='variable',?
???????????????????y='value',?
???????????????????fill='category'))?#類別填充顏色
????+?geom_col(position='dodge',?
???????????????show_legend=False)???#?modified
????+?geom_text(aes(y=-.5,?label='category'),??????????????????????????#?new
????????????????position=dodge_text,
????????????????color='gray',??#文本顏色
????????????????size=8,???#字號(hào)
????????????????angle=30,?#文本的角度
????????????????va='top')
????
?+?lims(y=(-5,?60))?????????????????????????????????????????????????#?new
)
from?plotnine.data?import?economics_long
economics_long.head()
| 1967-07-01 | pce | 507.4 | 0.000000 |
| 1967-08-01 | pce | 510.5 | 0.000266 |
| 1967-09-01 | pce | 516.3 | 0.000764 |
| 1967-10-01 | pce | 512.9 | 0.000472 |
| 1967-11-01 | pce | 518.1 | 0.000918 |
(
????ggplot(economics_long,?aes(x='date',?y='value01',?color='variable'))
????+?geom_line()
)
plotnine目前已經(jīng)支持絕大多數(shù)ggplot2,但是文檔方面沒(méi)有g(shù)gplot2全,所以學(xué)習(xí)plotnine時(shí)可以參考ggplot2。
- plotnine文檔 https://plotnine.readthedocs.io/en/latest/
- R語(yǔ)言ggplot2文檔 https://ggplot2.tidyverse.org/reference/index.html
往期文章
[更新] Python網(wǎng)絡(luò)爬蟲(chóng)與文本數(shù)據(jù)分析?rpy2庫(kù) | 在jupyter中調(diào)用R語(yǔ)言代碼plydata庫(kù) | 數(shù)據(jù)操作管道操作符>>tidytext | 耳目一新的R-style文本分析庫(kù)七夕禮物 | 全網(wǎng)最火的釘子繞線圖制作教程讀完本文你就了解什么是文本分析文本分析在經(jīng)管領(lǐng)域中的應(yīng)用概述??綜述:文本分析在市場(chǎng)營(yíng)銷研究中的應(yīng)用plotnine: Python版的ggplot2作圖庫(kù)小案例: Pandas的apply方法??stylecloud:簡(jiǎn)潔易用的詞云庫(kù)?用Python繪制近20年地方財(cái)政收入變遷史視頻??Wow~70G上市公司定期報(bào)告數(shù)據(jù)集漂亮~pandas可以無(wú)縫銜接Bokeh??YelpDaset: 酒店管理類數(shù)據(jù)集10+G??公眾號(hào)后臺(tái)回復(fù)關(guān)鍵詞【plotnine入門】即可下載本文數(shù)據(jù)代碼
“分享”和“在看”是更好的支持!總結(jié)
以上是生活随笔為你收集整理的r语言ggplot2 多线图绘制图例_plotnine: Python版的ggplot2作图库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 颐和园军官证免费吗
- 下一篇: python学生分布_Python数据分