Python擁有眾多的第三方庫(kù)使我們可以方便地進(jìn)行一些數(shù)據(jù)的可視化操作。目前很多庫(kù)的可視化應(yīng)用都是建立在matplotlib的基礎(chǔ)上的。所以這里重點(diǎn)介紹matplotlib庫(kù)的基本使用方法。
基本操作
先看一個(gè)示例代碼來(lái)了解一張圖的組成部分,如下所示。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 100)
y = np.cos(np.pi*x)
plt.plot(x, y, 'go')
plt.title(r'$y=\cos(\pi \times x)$')
plt.show()
運(yùn)行輸出如圖所示。
下面進(jìn)行簡(jiǎn)要說(shuō)明。
import matplotlib.pyplot as plt
一般用到的就是pyplot,且按照慣例導(dǎo)入為plt。
plt.plot(x,y,'go')
這里就比較明確了,x、y是自變量和因變量數(shù)據(jù)。后面的'go'是對(duì)樣式的控制:其中g表示選擇綠色,o表示選擇點(diǎn)的方式顯示。更多參數(shù)設(shè)置可使用幫助命令help(plt.plot)進(jìn)一步學(xué)習(xí)。
plt.title(r'$y=\cos(\pi \times x)$')
為圖添加一個(gè)標(biāo)題。值得注意的是,這里使用了LaTeX的格式,因?yàn)?/span>matplotlib是兼容LaTeX的。這對(duì)書寫公式提供了極大的便利。讀者可能會(huì)遇到無(wú)法顯示中文的情況,這一點(diǎn)接下來(lái)會(huì)進(jìn)行專門的講解。
plt.show()
通過(guò)show來(lái)展示圖像,在pandas和seaborn中也使用這句代碼進(jìn)行圖像的展示操作。
這里只是創(chuàng)建了一個(gè)圖像,然后加了標(biāo)題,還可以通過(guò)其他的設(shè)置使得圖表信息更加豐富,也更加美觀。
首先看一下增強(qiáng)版本的代碼,如下所示。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-2, 2, 100)
y1 = np.cos(np.pi * x)
y2 = np.sin(np.pi * x)
plt.plot(x, y1, 'go',label=r'$y1=\cos(\pi \times x)$', alpha=0.8, linewidth=0.7)
plt.plot(x, y2, 'r-',label=r'$y2=\sin(\pi \times x)$', alpha=0.8, linewidth=0.7)
plt.annotate('Important Point', (0,1), xytext=(-1.5, 1.1),
arrowprops=dict(arrowstyle='->'))
plt.xlabel('x-axis')
plt.ylabel('y-axis')
# 設(shè)置座標(biāo)范圍[xmin, xmax, ymin, ymax]
plt.axis([-2.1, 2.1, -1.2, 1.2])
# 顯示標(biāo)簽
plt.legend()
# 顯示網(wǎng)格
plt.grid(alpha=0.4)
plt.title('Two plots', color=(0.1,0.3, 0.5))
plt.show()
運(yùn)行輸出如圖所示。
下面進(jìn)行簡(jiǎn)要說(shuō)明。
alpha
alpha參數(shù)代表透明度,從0到1表示顏色逐漸加深。
linewidth
代表線條或者點(diǎn)的粗細(xì)程度。
axis
按照(xmin、xmax、ymin、ymax)的格式來(lái)限制座標(biāo)軸的范圍。
legend
在plot里面使用lable,記錄了當(dāng)前圖的圖例,可以通過(guò)調(diào)用legend使其顯示。在默認(rèn)情況下,圖例會(huì)顯示在最合適的空白處,當(dāng)然也可以手動(dòng)調(diào)節(jié)其位置。
grid
顯示背景網(wǎng)格線,也可以通過(guò)alpha參數(shù)設(shè)置其透明度。
color=(0.1, 0.3, 0.5)
在有些情況下,matplotlib自帶的顏色達(dá)不到效果,此時(shí)可以通過(guò)設(shè)置歸一化到[0,1]的RGB元組來(lái)指定顏色。也可以使用HTML的十六進(jìn)制字符串,如'#eeefff'來(lái)指定顏色。
中文顯示問(wèn)題
在初次使用matplotlib時(shí)一般都會(huì)遇到無(wú)法顯示中文的問(wèn)題,無(wú)論是Windows還是Ubuntu之類的Linux系統(tǒng)。這里分別給出解決的辦法。
對(duì)于Windows,解決方法相對(duì)較為簡(jiǎn)單,只需要在開(kāi)頭處加上下面三行代碼,一般就可以了。
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] =['Microsoft YaHei']
mpl.rcParams['axes.unicode_minus'] = False
對(duì)于Ubuntu系統(tǒng),需要手動(dòng)指定字體來(lái)實(shí)現(xiàn)中文的顯示。
設(shè)置代碼如下。
import matplotlib.pyplot as plt
import matplotlib as mpl
zhfont =mpl.font_manager.FontProperties(fname='/home/shensir/Downloads/Fonts/msyh.ttc')
plt.plot([1, 2, 3], label='標(biāo)簽')
plt.title('中文標(biāo)題', fontproperties=zhfont)
plt.xlabel('x軸', fontproperties=zhfont)
plt.ylabel('y軸', fontproperties=zhfont)
plt.legend(prop=zhfont)
plt.show()
運(yùn)行輸出如圖所示。
注意:這里表示字體的.ttc文件是從Windows系統(tǒng)中拷貝過(guò)來(lái)的,可以放到任意路徑,通過(guò)程序指定其路徑即可。當(dāng)然讀者也可以從網(wǎng)上尋找其他永久設(shè)置的方法,由于大部分都比較煩瑣,這里就不展開(kāi)介紹了。
matplotlib的進(jìn)階使用
繪制子圖
下面介紹怎樣在一張圖上繪制多個(gè)子圖,代碼如下。
import numpy as np
import matplotlib.pyplot as plt
# 繪制子圖[subplot]
plt.style.use('ggplot') # 設(shè)置繪圖風(fēng)格
x = np.linspace(-2, 2, 100)
y1 = np.sin(np.pi * x)
y2 = np.cos(np.pi * x)
y3 = np.tan(np.pi * x)
y4 = x
plt.subplot(221)
plt.plot(x, y1)
plt.subplot(222)
plt.plot(x, y2)
plt.subplot(223)
plt.plot(x, y3)
plt.subplot(224)
plt.plot(x, y4)
plt.show()
運(yùn)行輸出如圖所示。
下面進(jìn)行簡(jiǎn)要說(shuō)明。
plt.style.use('ggplot')
這里設(shè)置matplotlib的做圖的風(fēng)格為ggplot(熟悉R語(yǔ)言的讀者可能對(duì)此并不陌生,因?yàn)?/span>ggplot2包具有強(qiáng)大的可視化功能)。除此之外還有很多種其他的風(fēng)格,可以通過(guò)print(plt.style.available)查看。
plt.subplot(221)
這里subplot的參數(shù)221,應(yīng)當(dāng)分別解讀。22代表要繪制兩行兩列共四個(gè)子圖。1代表在第一位置做圖。這里的1可以看作(1,1),對(duì)應(yīng)的2、3、4可以看作座標(biāo)(1,2)、(2,1)、(2,2)
繪制填充圖
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 1, 500)
y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
fig, ax = plt.subplots()
ax.fill(x, y)
plt.show()
運(yùn)行輸出如圖所示。
以上內(nèi)容選自《Python數(shù)據(jù)分析入門——從數(shù)據(jù)獲取到可視化》。想要了解更多的數(shù)據(jù)分析技術(shù)及Python實(shí)現(xiàn)嗎?可以點(diǎn)擊
聯(lián)系客服