unstack中文翻譯,unstack是什么意思,unstack發(fā)音、用法及例句
- 內(nèi)容導(dǎo)航:
- 1、unstack
- 2、如何高效地使用Matplotlib?
1、unstack
unstack發(fā)音
英: 美:
unstack中文意思翻譯
常見釋義:
退棧,出棧
unstack相似詞語短語
1、couples counseling───夫妻咨詢
2、unscriptural prayers───無劇本的祈禱
3、buttering buns───奶油面包
4、pronouns worksheets───代詞工作表
5、unsafelywelcome go home───不安全歡迎回家
6、unsound lyrics───不健全的歌詞
7、dative pronouns───與格代詞
8、unskilled jobs that pay well───薪水高的非技術(shù)性工作
9、unsatisfying gif───不滿意的gif
10、gunshot wounds───火器傷;槍傷
2、如何高效地使用Matplotlib?
引言
對(duì)新手來說 Python 可視化實(shí)在有些令人挫敗。有很多不同的選項(xiàng),如何選擇正確的選項(xiàng)是一個(gè)挑戰(zhàn)。例如,兩年前這篇文章《Overview of Python Visualization Tools》(http://pbpython.com/visualization-tools-1.html)仍然吸引了大量讀者。在那篇文章中,我否定了 Matplotlib。但是,在使用過 pandas、scikit-learn、seaborn 和其他 Python 數(shù)據(jù)科學(xué)棧之后,我覺得之前否認(rèn) Matplotlib 的行為有點(diǎn)不成熟。坦白講,當(dāng)時(shí)我不是很了解 Matplotlib,也不懂如何在我的工作流中高效使用 Matplotlib。
現(xiàn)在我學(xué)習(xí)了一些工具,了解了如何用 Matplotlib 使用這些工具,Matplotlib 逐漸變成了必需工具。本文將展示如何使用 Matplotlib。我堅(jiān)定地認(rèn)為 Matplotlib 是 Python 數(shù)據(jù)科學(xué)棧必不可少的一部分,希望這篇文章可以幫助大家了解如何使用 Matplotlib 進(jìn)行 Python 可視化。
為什么大家都在否定 Matplotlib?
我認(rèn)為,Matplotlib 對(duì)于新手來說比較難存在幾個(gè)原因。首先,Matplotlib 有兩個(gè)界面。第一個(gè)界面基于 MATLAB,使用基于狀態(tài)的接口。第二個(gè)界面是面向?qū)ο蟮慕涌?。本文就不展開介紹 Matplotlib 有兩個(gè)界面的原因,但了解這兩種方法在使用 Matplotlib 繪圖時(shí)會(huì)很重要。兩個(gè)界面會(huì)引起混淆的原因是堆棧溢出和通過谷歌搜索獲取的大量信息,新用戶將發(fā)現(xiàn)問題的多個(gè)解決方案,但是這些問題看起來類似卻不完全相同。從我的個(gè)人經(jīng)驗(yàn)來講,從以前的代碼中,我可以看出有一些 Matplotlib 代碼的混雜,我對(duì)此感覺很疑惑(盡管寫它們的人是我……):-)
關(guān)鍵點(diǎn)
Matplotlib 新手應(yīng)該學(xué)習(xí)和使用面向?qū)ο蟮慕涌凇?/p>
使用 Matplotlib 的另一個(gè)歷史性挑戰(zhàn)是一些默認(rèn)的樣式缺乏吸引力。在 R 使用 ggplot 就可以生成相當(dāng)不錯(cuò)的圖的世界中,Matplotlib 相對(duì)來說有點(diǎn)丑。好消息是 Matplotlib 2.0 中的樣式好看了很多,你可以用最小的努力生成可視化。
第三個(gè)挑戰(zhàn)是你不確定什么時(shí)候該使用 Matplotlib,什么時(shí)候該使用基于 Matplotlib 構(gòu)建的工具,如 pandas 或 seaborn。大部分時(shí)候做一件事都有多種選擇,但是對(duì)于新手來說選擇正確的道路有些困難。這種混淆加上兩種不同 API 的混淆簡直就是挫敗本敗了……
為什么使用 Matplotlib?
盡管 Matplotlib 有這么多問題,我還是喜歡用它,因?yàn)樗軓?qiáng)大。這個(gè)庫允許你創(chuàng)建幾乎所有可視化。此外,圍繞 Matplotlib 有一個(gè)豐富的 Python 工具生態(tài)環(huán)境,很多更高級(jí)的可視化工具使用 Matplotlib 作為基礎(chǔ)庫。如果你想在 Python 數(shù)據(jù)科學(xué)棧中進(jìn)行任何操作,你需要對(duì)如何使用 Matplotlib 有一些基礎(chǔ)了解。這就是本文其余部分的重點(diǎn)——提供一種高效使用 Matplotlib 的基礎(chǔ)方法。
前提
推薦以下步驟學(xué)習(xí)如何使用 Matplotlib:
1. 學(xué)習(xí) Matplotlib 的基本術(shù)語,具體來說就是什么是 Figure 和 Axes。
2. 一直使用面向?qū)ο蟮慕缑?,養(yǎng)成習(xí)慣。
3. 用基礎(chǔ)的 pandas 繪圖開始可視化。
4. 使用 seaborn 進(jìn)行稍微復(fù)雜的數(shù)據(jù)可視化。
5. 使用 Matplotlib 自定義 pandas 或 seaborn 可視化。
下圖非常重要,有助于理解圖的不同術(shù)語。
大部分術(shù)語很直接易懂,需要牢記的是 Figure 是可能包含一或多個(gè) axes 的最終圖像。Axes 代表單個(gè)圖。一旦你理解這些是什么以及如何通過面向?qū)ο蟮?API 評(píng)估它們,其余步驟就很簡單了。
了解這個(gè)知識(shí)還有一個(gè)好處,就是當(dāng)你在網(wǎng)絡(luò)上看東西的時(shí)候有一個(gè)出發(fā)點(diǎn)。如果你花時(shí)間了解了這個(gè)點(diǎn),那么其他的 Matplotlib API 才有意義。此外,很多高級(jí) Python 包,如 seaborn 和 ggplot 依賴于 Matplotlib 構(gòu)建,因此理解了基礎(chǔ),學(xué)習(xí)更強(qiáng)大的框架才更加容易。
最后,我不是說你應(yīng)該逃避其他優(yōu)秀選項(xiàng),如 ggplot(又名 ggpy)、bokeh、plotly 或 altair。我只是認(rèn)為你需要對(duì) matplotlib + pandas + seaborn 有一個(gè)基礎(chǔ)的了解。了解基礎(chǔ)可視化棧之后,你就可以探索其他優(yōu)秀工具,根據(jù)需求做出合適的選擇。
開始
下面主要介紹如何在 pandas 中創(chuàng)建基礎(chǔ)的可視化以及使用 Matplotlib 定制最常用的項(xiàng)。了解基礎(chǔ)流程有助于更直觀地進(jìn)行自定義。
我主要關(guān)注最常見的繪圖任務(wù),如標(biāo)注軸、調(diào)整圖形界限(limit)、更新圖標(biāo)題、保存圖像和調(diào)整圖例。
開始,我打算設(shè)置輸入,讀取一些數(shù)據(jù):
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import FuncFormatter
df = pd.read_excel("https://github.com/chris1610/pbpython/blob/master/data/sample-salesv3.xlsx?raw=true")
df.head()
數(shù)據(jù)包括 2014 年的銷售交易額。為簡短起見,我將總結(jié)這些數(shù)據(jù),列出前十名客戶的采購次數(shù)和交易額。繪圖時(shí)我將對(duì)各列進(jìn)行重命名。
top_10 = (df.groupby('name')['ext price', 'quantity'].agg({'ext price': 'sum', 'quantity': 'count'})
.sort_values(by='ext price', ascending=False))[:10].reset_index()
top_10.rename(columns={'name': 'Name', 'ext price': 'Sales', 'quantity': 'Purchases'}, inplace=True)
下圖是數(shù)據(jù)。
現(xiàn)在數(shù)據(jù)在簡單的表格形式呈現(xiàn),我們?cè)賮砜匆幌氯绾螌?shù)據(jù)繪制成條形圖。如前所述,Matplotlib 具備多種不同風(fēng)格,可用于渲染圖表。你可以使用 plt.style.available 查看你的系統(tǒng)可用的風(fēng)格。
plt.style.available
['seaborn-dark',
'seaborn-dark-palette',
'fivethirtyeight',
'seaborn-whitegrid',
'seaborn-darkgrid',
'seaborn',
'bmh',
'classic',
'seaborn-colorblind',
'seaborn-muted',
'seaborn-white',
'seaborn-talk',
'grayscale',
'dark_background',
'seaborn-deep',
'seaborn-bright',
'ggplot',
'seaborn-paper',
'seaborn-notebook',
'seaborn-poster',
'seaborn-ticks',
'seaborn-pastel']
使用如下簡單風(fēng)格:
plt.style.use('ggplot')
我鼓勵(lì)大家使用不同的風(fēng)格,找到自己喜歡的。
現(xiàn)在我們有了好看的風(fēng)格,第一步就是使用標(biāo)準(zhǔn) pandas 繪圖函數(shù)繪制數(shù)據(jù):
top_10.plot(kind='barh', y="Sales", x="Name")
推薦使用 pandas 繪圖的原因在于它是一種快速便捷地建立可視化原型的方式。
自定義圖表
如果你對(duì)該圖表的重要部分都很滿意,那么下一步就是對(duì)它執(zhí)行自定義。一些自定義(如添加標(biāo)題和標(biāo)簽)可以使用 pandas plot 函數(shù)輕松搞定。但是,你可能會(huì)發(fā)現(xiàn)自己需要在某個(gè)時(shí)刻跳出來。這就是我推薦你養(yǎng)成以下習(xí)慣的原因:
fig, ax = plt.subplots()
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
生成的圖表和原始圖表基本一樣,不過我們向 plt.subplots() 添加了一個(gè)額外的調(diào)用,并將 ax 傳輸至繪圖函數(shù)。為什么要這么做呢?還記得我說在 Matplotlib 中獲取軸和圖像非常關(guān)鍵嗎?這里所做的就是為了達(dá)到該目的。通過 ax 或 fig 對(duì)象可以執(zhí)行任何自定義。
我們利用 pandas 實(shí)現(xiàn)快速繪圖,現(xiàn)在利用 Matplotlib 獲取所有功能。通過使用命名慣例,調(diào)整別人的解決方案適應(yīng)自己的需求變得更加直接簡單了。
假設(shè)我們想調(diào)整 x 極限,改變一些軸標(biāo)簽?,F(xiàn)在我們?cè)?ax 變量中有多個(gè)軸,可以進(jìn)行一些操作:
fig, ax = plt.subplots()
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
ax.set_xlim([-10000, 140000])
ax.set_xlabel('Total Revenue')
ax.set_ylabel('Customer');
這是另一種改變標(biāo)題和標(biāo)簽的簡單方式:
fig, ax = plt.subplots()
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
ax.set_xlim([-10000, 140000])
ax.set(title='2014 Revenue', xlabel='Total Revenue', ylabel='Customer')
為了進(jìn)一步展示該方法,我們還可以調(diào)整圖像大小。使用 plt.subplots() 函數(shù)可以定義 figsize,以英寸為單位。我們還可以使用 ax.legend().set_visible(False) 移除圖例。
fig, ax = plt.subplots(figsize=(5, 6))
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
ax.set_xlim([-10000, 140000])
ax.set(title='2014 Revenue', xlabel='Total Revenue')
ax.legend().set_visible(False)
要想修改這個(gè)圖像,你可能需要執(zhí)行很多操作。圖中最礙眼的可能是總收益額的格式。Matplotlib 可以使用 FuncFormatter 解決這一問題。該函數(shù)用途多樣,允許用戶定義的函數(shù)應(yīng)用到值,并返回格式美觀的字符串。
以下是貨幣格式化函數(shù),用于處理數(shù)十萬美元區(qū)間的數(shù)值:
def currency(x, pos):
'The two args are the value and tick position'
if x >= 1000000:
return '${:1.1f}M'.format(x*1e-6)
return '${:1.0f}K'.format(x*1e-3)
現(xiàn)在我們有了格式化程序函數(shù),就需要定義它,并將其應(yīng)用到 x 軸。完整代碼如下:
fig, ax = plt.subplots()
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
ax.set_xlim([-10000, 140000])
ax.set(title='2014 Revenue', xlabel='Total Revenue', ylabel='Customer')
formatter = FuncFormatter(currency)
ax.xaxis.set_major_formatter(formatter)
ax.legend().set_visible(False)
這張圖美觀多了,非常好地展示了自定義問題解決方案的靈活性。最后要說的自定義特征是向圖表添加注釋。你可以使用 ax.axvline() 畫垂直線,使用 ax.text() 添加自定義文本。就以上示例,我們可以畫一條表示平均值的線,包括代表 3 個(gè)新客戶的標(biāo)簽。以下是完整代碼:
# Create the figure and the axes
fig, ax = plt.subplots()
# Plot the data and get the averaged
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax)
avg = top_10['Sales'].mean()
# Set limits and labels
ax.set_xlim([-10000, 140000])
ax.set(title='2014 Revenue', xlabel='Total Revenue', ylabel='Customer')
# Add a line for the average
ax.axvline(x=avg, color='b', label='Average', linestyle='--', linewidth=1)
# Annotate the new customers
for cust in [3, 5, 8]:
ax.text(115000, cust, "New Customer")
# Format the currency
formatter = FuncFormatter(currency)
ax.xaxis.set_major_formatter(formatter)
# Hide the legend
ax.legend().set_visible(False)
這可能不是最壯觀的圖,但它確實(shí)展示了使用該方法的力量。
圖表
目前,我們所做的所有改變都是針對(duì)單個(gè)圖表。我們還能夠在圖像上添加多個(gè)表,使用不同的選項(xiàng)保存整個(gè)圖像。
如果我們確定要在同一個(gè)圖像上放置兩個(gè)表,那么我們應(yīng)該對(duì)如何做有一個(gè)基礎(chǔ)了解。首先,創(chuàng)建圖像,然后創(chuàng)建軸,再將它們繪制成圖表。使用 plt.subplots() 可以完成該操作:
fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2, sharey=True, figsize=(7, 4))
在這個(gè)例子中,我使用 nrows 和 ncols 指定大小,這對(duì)新用戶來說比較清晰易懂。
在示例代碼中,你會(huì)經(jīng)??吹阶兞咳?1、2。我認(rèn)為使用命名參數(shù)便于稍后查看代碼時(shí)理解代碼。
我還使用 sharey=True 以使 y 軸共享相同的標(biāo)簽。
該示例很靈活,因?yàn)椴煌妮S可以解壓成 ax0 和 ax1?,F(xiàn)在我們有了這些軸,就可以像上述示例中那樣繪圖,然后把一個(gè)圖放在 ax0 上,另一個(gè)圖放在 ax1。
# Get the figure and the axes
fig, (ax0, ax1) = plt.subplots(nrows=1,ncols=2, sharey=True, figsize=(7, 4))
top_10.plot(kind='barh', y="Sales", x="Name", ax=ax0)
ax0.set_xlim([-10000, 140000])
ax0.set(title='Revenue', xlabel='Total Revenue', ylabel='Customers')
# Plot the average as a vertical line
avg = top_10['Sales'].mean()
ax0.axvline(x=avg, color='b', label='Average', linestyle='--', linewidth=1)
# Repeat for the unit plot
top_10.plot(kind='barh', y="Purchases", x="Name", ax=ax1)
avg = top_10['Purchases'].mean()
ax1.set(title='Units', xlabel='Total Units', ylabel='')
ax1.axvline(x=avg, color='b', label='Average', linestyle='--', linewidth=1)
# Title the figure
fig.suptitle('2014 Sales Analysis', fontsize=14, fontweight='bold');
# Hide the legends
ax1.legend().set_visible(False)
ax0.legend().set_visible(False)
現(xiàn)在,我已經(jīng)在 jupyter notebook 中用 %matplotlib inline 展示了很多圖像。但是,在很多情況下你需要以特定格式保存圖像,將其和其他呈現(xiàn)方式整合在一起。
Matplotlib 支持多種不同文件保存格式。你可以使用 fig.canvas.get_supported_filetypes() 查看系統(tǒng)支持的文件格式:
fig.canvas.get_supported_filetypes()
{'eps': 'Encapsulated Postscript',
'jpeg': 'Joint Photographic Experts Group',
'jpg': 'Joint Photographic Experts Group',
'pdf': 'Portable Document Format',
'pgf': 'PGF code for LaTeX',
'png': 'Portable Network Graphics',
'ps': 'Postscript',
'raw': 'Raw RGBA bitmap',
'rgba': 'Raw RGBA bitmap',
'svg': 'Scalable Vector Graphics',
'svgz': 'Scalable Vector Graphics',
'tif': 'Tagged Image File Format',
'tiff': 'Tagged Image File Format'}
我們有 fig 對(duì)象,因此我們可以將圖像保存成多種格式:
fig.savefig('sales.png', transparent=False, dpi=80, bbox_inches="tight")
該版本將圖表保存為不透明背景的 png 文件。我還指定 dpi 和 bbox_inches="tight" 以最小化多余空白。
結(jié)論
希望該方法可以幫助大家理解如何更有效地使用 Matplotlib 進(jìn)行日常數(shù)據(jù)分析。
本站其他內(nèi)容推薦
1、search octoroon Laurasia suck inflexible menhaden botony cocky sinfonia post-mortem
2、BOST中文翻譯,BOST是什么意思,BOST發(fā)音、用法及例句
3、laws什么意思(law中文翻譯,law是什么意思,law發(fā)音、用法及例句)
4、pulse怎么讀(pulse中文翻譯,pulse是什么意思,pulse發(fā)音、用法及例句)
5、Wechat id中文翻譯,Wechat id是什么意思,Wechat id發(fā)音、用法及例句
6、下陵上替的意思,下陵上替成語解釋,下陵上替是什么意思含義寓意
7、憂[ yōu ],憂字的拼音,部首,意思,組詞,成語,憂字的筆順,筆畫順序怎么寫
版權(quán)聲明: 本站僅提供信息存儲(chǔ)空間服務(wù),旨在傳遞更多信息,不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任,不代表本網(wǎng)贊同其觀點(diǎn)和對(duì)其真實(shí)性負(fù)責(zé)。如因作品內(nèi)容、版權(quán)和其它問題需要同本網(wǎng)聯(lián)系的,請(qǐng)發(fā)送郵件至 舉報(bào),一經(jīng)查實(shí),本站將立刻刪除。