天天看點

安利 5 個拍案叫絕的 Matplotlib 騷操作!

安利 5 個拍案叫絕的 Matplotlib 騷操作!

原作:Parul Pandey

Python資料科學整理,東哥起飛

大家都知道,Matplotlib是Python的可視化庫,功能很強,可以繪制各種圖。一些正常用法前不久分享過Matplotlib官方出品的cheatsheet:Matplotlib官方小抄手冊公開,配套可視化代碼已打包!

但是!今天我們不走尋常路,專挑幾個賊騷的操作分享下

安利 5 個拍案叫絕的 Matplotlib 騷操作!

1. Span Selector

Span Selector是Matplotlib中的滑鼠小部件,widgets是用于包含一些互動功能的python對象。Span Selector可以通過滑鼠框選,友善地檢視標明區域的最大值和最小值。

下面是代碼,首先建立一個基本折線圖作為例子。然後,我們調用SpanSelector方法并使用它來選擇一個區域,然後在該區域中顯示最大值和最小值。

import matplotlib.pyplot as plt
from matplotlib.widgets import SpanSelector
def onselect(xmin, xmax):
    print(xmin, xmax)
    return xmin, xmax
fig, ax = plt.subplots()
ax.plot([1,2,3,4,5,6,7], [10, 50, 100, 23,15,28,45])
span = SpanSelector(ax, onselect, 'horizontal', useblit=True, rectprops=dict(alpha=0.5, facecolor='red'))       
plt.show()           

複制

下面是具體操作。

安利 5 個拍案叫絕的 Matplotlib 騷操作!

2. Broken Barh

Broken的水準條形圖是不連續具有間隙的圖,它可用于資料值相差很大的情況下,例如,包含極端溫度範圍的資料集。在這種情況下,Broken的水準條形圖非常合适,因為它們可以同時繪制最大和最小範圍。

python子產品matplotlib.broken_barh()用于繪制Broken的水準條形圖。

import matplotlib.pyplot as plt 
#Defining the x and y ranges 
xranges = [(5,5), (20,5),(20,7)] 
yrange = (2,1) 
#Plotting the broken bar chart 
plt.broken_barh(xranges, yrange, facecolors='green') 
xranges = [(6,2), (17,5),(50,2)] 
yrange = (15,1) 
plt.broken_barh(xranges, yrange, facecolors='orange') 
xranges = [(5,2), (28,5),(40,2)] 
yrange = (30,1) 
plt.broken_barh(xranges, yrange, facecolors='red') 
plt.xlabel('Sales') 
plt.ylabel('Days of the Month') 
plt.show()           

複制

安利 5 個拍案叫絕的 Matplotlib 騷操作!

3. Table Demo

Matplotlib的表格功能也是可以在圖中顯示表格的。當我們希望以條形圖的形式快速檢視表格中的值時,這特别友善。表格可以放置在圖表的頂部,底部或側面。

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
x = np.random.rand(5, 8)*.7 
plt.plot(x.mean(axis=0), '-o', label='average per column') 
plt.xticks([]) 
plt.table(cellText=[['%1.2f' % xxx for xxx in xx] for xx in x],cellColours=plt.cm.GnBu(x),loc='bottom') 
plt.show()           

複制

安利 5 個拍案叫絕的 Matplotlib 騷操作!
安利 5 個拍案叫絕的 Matplotlib 騷操作!

4. Watermark Images

有時候我們覺得可視化的背景太單調了,想增加點趣味性,比如将與資料相關的圖像作為水印覆寫到可視化圖形上。下面就以NBA的詹皇為例試試水,最後呈現出詹皇的資料,同時背景是詹皇本人。

首先,導入要用的資料集,圖檔和必要的庫pandas。

import numpy as np 
import matplotlib.image as image 
import matplotlib.pyplot as plt 
import pandas as pd 
df = pd.read_csv('income.csv') 
im = image.imread('Lebron_James.jpeg') # Image           

複制

用pandas過濾掉僅由勒布朗組成的資料。

lebron_james = df[df['Name']=='LeBron James']           

複制

然後像下面這樣操作,使用figimage添加水印就ok了。

fig, ax = plt.subplots() 
ax.grid() 
ax.plot('Year','earnings ($ million)',data=lebron_james) 
ax.set_title("LeBron James earnings in US$(millions)") 
fig.figimage(im, 60, 40,cmap='ocean', alpha=.2) 
plt.show()           

複制

安利 5 個拍案叫絕的 Matplotlib 騷操作!

5. XKCD Plots

下面這個操作更有趣味性(更騷)。如果你想讓Matplotlib圖上添加一些扭曲,可以簡單地xkcd()在pyplot對象上調用方法,如下所示。

import pandas as pd 
import matplotlib.pyplot as plt 
df = pd.read_csv('https://raw.githubusercontent.com/parulnith/Website-articles-datasets/master/India%20GDP%20Growth%20Rate%20.csv', parse_dates=['Year']) 
df['Year'] = df['Year'].apply(lambda x: pd.Timestamp(x).strftime('%Y')) 
#calling xkcd() method 
plt.xkcd(scale=5, length=400) 
df.plot(x='Year',y='GDP Growth (%)',kind='bar') 
plt.ylabel('GDP Growth (%)') 
plt.xticks(rotation=-20) 
plt.figure(figsize=(10,8)) 
plt.show()           

複制

安利 5 個拍案叫絕的 Matplotlib 騷操作!

文章參考:

https://towardsdatascience.com/advanced-plots-in-matplotlib-part-1-30dbb02b09ae

歡迎在留言區和東哥讨論