1. 引言
數(shù)據(jù)可視化非常重要,有一句俗語叫做一圖頂千言
,我相信好多小伙伴應(yīng)該都聽說過這句話;即使是有人第一次聽到,我想應(yīng)該也會覺得贊成,這足以說明數(shù)據(jù)可視化的重要性。我們在前一篇博客中,介紹了如何利用subplot
來在一張子圖里繪制多個(gè)子圖,最近我又發(fā)現(xiàn)了一種更加優(yōu)雅地實(shí)現(xiàn),迫不及待地想要和大家分享。
閑話少說,我們直接開始吧!
2. 舉個(gè)栗子
為了更加便捷地實(shí)現(xiàn)在圖一圖像中繪制多個(gè)子圖,這里我強(qiáng)烈安利subplot_mosaic()
函數(shù),它使得子圖的布局更加靈活。我們不妨來直接看以下例子:
請注意,此時(shí)我們有3個(gè)子圖。圖A將在左上角占據(jù)一個(gè)位置;圖 B 將在圖的左下角占據(jù)一個(gè)位置;同時(shí)圖C將在右側(cè)的頂部和底部占據(jù)兩個(gè)位置?,F(xiàn)在,我們所要做的就是將其轉(zhuǎn)換為Python實(shí)現(xiàn),您會發(fā)現(xiàn)它非常簡單。
3. 代碼實(shí)現(xiàn)
我們使用matplotlib
庫中的函數(shù)subplot_mosaic
實(shí)現(xiàn)上述功能,代碼如下:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# Data
df = sns.load_dataset('tips')
# Plot with Mosaic
fig = plt.figure(layout= 'constrained')
mosaic = fig.subplot_mosaic('''
ac
bc
''')
# Plot A
mosaic['a'].bar(df.sex, df.tip, color='coral')
# Plot B
mosaic['b'].scatter(df.total_bill, df.tip, color='forestgreen')
# Plot C
mosaic['c'].boxplot(df.tip, patch_artist=True);
運(yùn)行結(jié)果如下:
4. 代碼分析
讓我們仔細(xì)研究一下上述代碼,我們首先開始創(chuàng)建一個(gè)figure
,接著創(chuàng)建一個(gè)mosaic
變量 , 其中函數(shù)subplot_mosaic
的入?yún)樽址W⒁?,代碼中使用ac bc
的順序和形狀與上圖相同。通過在右側(cè)重復(fù)c
兩次來告訴matplotlib
我們希望圖c
占據(jù)圖形中的兩個(gè)位置。其余代碼只是常規(guī)的單個(gè)子圖的創(chuàng)建代碼。
我們可以打印一下mosaic
變量的值,可以看到如下:{'a': <Axes: label='a'>, 'c': <Axes: label='c'>, 'b': <Axes: label='b'>}
。
因此,實(shí)質(zhì)上我們調(diào)用subplot_mosaic
函數(shù)返回了一個(gè)字典,剩下的就是需要常規(guī)的畫出每個(gè)對應(yīng)位置上的子圖。
5. 改變布局
如果你看懂了上述代碼,那么我們可以輕易的改變上述子圖的布局。
代碼如下:
# Plot with Mosaic
fig = plt.figure(layout= 'constrained', figsize=(12,6))
mosaic = fig.subplot_mosaic('''
aaa
bcc
''')
# Plot A
mosaic['a'].bar(df.day, df.tip, color='coral')
# Plot B
mosaic['b'].boxplot(df.total_bill, patch_artist=True)
# Plot C
mosaic['c'].scatter(df.total_bill, df.tip, color='forestgreen');
結(jié)果如下:
6. 添加標(biāo)題
如果我們需要對上述圖表添加標(biāo)題,該如何實(shí)現(xiàn)呢?實(shí)質(zhì)上我們可以使用一行額外的代碼為整個(gè)圖像添加一個(gè)標(biāo)題。
# Adding a single title to the mosaic
plt.suptitle(''' -- P L O T S --
- Top Left: Sum of tips by Sex -
- Bottom Left: Tip by Total Bill -
- Right: Boxplot of Tips - ''')
結(jié)果如下:
什么?你希望對每個(gè)子圖添加一個(gè)標(biāo)題。由于mosaic
為一個(gè)字典,那我們可以創(chuàng)建一個(gè)循環(huán),通過遍歷想要的key-value
來實(shí)現(xiàn)。代碼如下:
# Define Titles
titles = ['Sum of tips by Sex', 'Tip by Total Bill', 'Boxplot of Tips']
# One title per plot
for ax, g_title in zip(mosaic.items(), titles):
ax[1].set_title(g_title, fontstyle='italic')
結(jié)果如下:
Wow,經(jīng)過一步步美化,最后呈現(xiàn)的結(jié)果果然好看多了。
7. 總結(jié)
我相信在單個(gè)圖形中繪制多個(gè)圖形有助于對比和提升可視化效果的目的,擁有一種使其更簡潔的方法會提升很大的效果,推薦大家多多使用。文章來源:http://www.zghlxwxcb.cn/news/detail-500197.html
您學(xué)廢了嘛?文章來源地址http://www.zghlxwxcb.cn/news/detail-500197.html
到了這里,關(guān)于【Python】在同一圖形中更加優(yōu)雅地繪制多個(gè)子圖的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!