【python資料探勘課程】十五.Matplotlib呼叫imshow()函式繪製熱圖
前面系列文章講過資料探勘的各種知識,最近在研究人類時空動力學分析和冪率定律,發現在人類興趣轉移模型中,可以通過熱圖(斑圖)來進行描述的興趣轉移,如下圖所示。下一篇文章將簡單普及人類動力學相關知識研究。
這篇文章結合Matplotlib的imshow()函式,講述熱圖(斑圖)繪製及相關引數基礎知識。希望文章對你有所幫助,如果文章中存在錯誤或不足之處,還請海涵。
前文推薦:
【Python資料探勘課程】一.安裝Python及爬蟲入門介紹
【Python資料探勘課程】二.Kmeans聚類資料分析及Anaconda介紹
【Python資料探勘課程】三.Kmeans聚類程式碼實現、作業及優化
【Python資料探勘課程】四.決策樹DTC資料分析及鳶尾資料集分析
【Python資料探勘課程】五.線性迴歸知識及預測糖尿病例項
【Python資料探勘課程】六.Numpy、Pandas和Matplotlib包基礎知識
【Python資料探勘課程】七.PCA降維操作及subplot子圖繪製
【Python資料探勘課程】八.關聯規則挖掘及Apriori實現購物推薦
【Python資料探勘課程】九.迴歸模型LinearRegression簡單分析氧化物資料
【python資料探勘課程】十.Pandas、Matplotlib、PCA繪圖實用程式碼補充
【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析
【python資料探勘課程】十二.Pandas、Matplotlib結合SQL語句對比圖分析
【python資料探勘課程】十三.WordCloud詞雲配置過程及詞頻分析
【python資料探勘課程】十四.Scipy呼叫curve_fit實現曲線擬合
一. Matplotlib簡單回顧
Matplotlib是Python最著名的2D繪相簿,該庫仿造Matlab提供了一整套相似的繪圖函式,用於繪圖和繪表,強大的資料視覺化工具和做相簿,適合互動式繪圖,圖形美觀。
首先,通過一段程式碼給大家回顧下Matplotlib繪圖知識。繪製2*3共6個子圖,且圖為空的程式碼如下:
# coding=utf-8
from matplotlib import pyplot as plt
fig = plt.figure()
ax1 = fig.add_subplot(231)
ax2 = fig.add_subplot(232)
ax3 = fig.add_subplot(233)
ax4 = fig.add_subplot(234)
ax5 = fig.add_subplot(235)
ax6 = fig.add_subplot(236)
plt.grid(True)
plt.show()
執行結果如下圖所示:然後需要呼叫函式繪圖,下面提幾個重點知識:
1.plot(x, y, marker='D')表示繪製折線圖,marker設定樣式菱形。
2.scatter(x, y, marker='s', color='r')繪製散點圖,紅色正方形。
3.bar(x, y, 0.5, color='c')繪製柱狀圖,間距為0.5,原色。
4.hist(data,40,normed=1,histtype='bar',
facecolor='yellowgreen',alpha=0.75)直方圖。
5.設定x軸和y軸的座標值:
xlim(-2.5, 2.5) #設定x軸範圍 ylim(-1, 1) #設定y軸範圍
6.顯示中文和負號程式碼如下:
plt.rcParams['font.sas-serig']=['SimHei'] #用來正常顯示中文標籤
plt.rcParams['axes.unicode_minus']=False #用來正常顯示負號
完整程式碼如下:
# coding=utf-8
import numpy as np
from pylab import *
from matplotlib import pyplot as plt
x = [1, 2, 3, 4]
y = [3, 5, 10, 25]
#建立Figure
fig = plt.figure()
#建立一個或多個子圖(subplot繪圖區才能繪圖)
ax1 = fig.add_subplot(231)
plt.plot(x, y, marker='D') #繪圖及選擇子圖
plt.sca(ax1)
ax2 = fig.add_subplot(232)
plt.scatter(x, y, marker='s', color='r')
plt.sca(ax2)
plt.grid(True)
ax3 = fig.add_subplot(233)
plt.bar(x, y, 0.5, color='c') #柱狀圖 width=0.5間距
plt.sca(ax3)
ax4 = fig.add_subplot(234)
#高斯分佈
mean = 0 #均值為0
sigma = 1 #標準差為1 (反應資料集中還是分散的值)
data = mean+sigma*np.random.randn(10000)
plt.hist(data,40,normed=1,histtype='bar',facecolor='yellowgreen',alpha=0.75)
plt.sca(ax4)
m = np.arange(-5.0, 5.0, 0.02)
n = np.sin(m)
ax5 = fig.add_subplot(235)
plt.plot(m, n)
plt.sca(ax5)
ax6 = fig.add_subplot(236)
xlim(-2.5, 2.5) #設定x軸範圍
ylim(-1, 1) #設定y軸範圍
plt.plot(m, n)
plt.sca(ax6)
plt.grid(True)
plt.show()
輸出結果如下圖所示:
Matplotlib強推部落格:
http://www.cnblogs.com/zhizhan/p/5615947.html
http://blog.csdn.net/jinlong_xu/article/details/70183377
【Python資料探勘課程】六.Numpy、Pandas和Matplotlib包基礎知識
二. imshow詳解熱圖知識
熱圖(heatmap)是資料分析的常用方法,通過色差、亮度來展示資料的差異、易於理解。Python在Matplotlib庫中,呼叫imshow()函式實現熱圖繪製。
參考資料:http://matplotlib.org/users/image_tutorial.html
原始碼介紹如下圖所示:
imshow(X, cmap=None, norm=None, aspect=None, interpolation=None, alpha=None, vmin=None, vmax=None, origin=None, extent=None, shape=None, filternorm=1, filterrad=4.0, imlim=None, resample=None, url=None, hold=None, data=None, **kwargs)
其中,X變數儲存影象,可以是浮點型陣列、unit8陣列以及PIL影象,如果其為陣列,則需滿足一下形狀:
(1) M*N 此時陣列必須為浮點型,其中值為該座標的灰度;
(2) M*N*3 RGB(浮點型或者unit8型別)
(3) M*N*4 RGBA(浮點型或者unit8型別)
下面這段程式碼是一個簡單的例項:
# coding=utf-8
from matplotlib import pyplot as plt
X = [[1,2],[3,4],[5,6]]
plt.imshow(X)
plt.show()
輸出如下圖所示:Colorbar:增加顏色類標的程式碼是plt.colorbar(),程式碼如下:
#coding=utf-8
from matplotlib import pyplot as plt
X = [[1,2],[3,4],[5,6]]
plt.imshow(X)
plt.colorbar()
plt.show()
執行結果如下圖所示,其中左上角顏色為藍色,對應值為1;右下角顏色為深紅色,對應值為6。它是按照矩陣X進行顏色分佈的。
[1, 2] [深藍, 淺藍]
[3, 4] [淡綠, 黃色]
[5, 6] [橙紅, 深紅]
plt.colorbar(cax=None,ax=None,shrink=0.5)可設定Bar為一半長度。
Colormap:引數cmap用於設定熱圖的Colormap。(參考百度百科)
Colormap是MATLAB裡面用來設定和獲取當前色圖的函式,可以設定如下色圖:
hot 從黑平滑過度到紅、橙色和黃色的背景色,然後到白色。
cool 包含青綠色和品紅色的陰影色。從青綠色平滑變化到品紅色。
gray 返回線性灰度色圖。
bone 具有較高的藍色成分的灰度色圖。該色圖用於對灰度圖新增電子的檢視。
white 全白的單色色圖。
spring 包含品紅和黃的陰影顏色。
summer 包含綠和黃的陰影顏色。
autumn 從紅色平滑變化到橙色,然後到黃色。
winter 包含藍和綠的陰影色。
下面這段程式碼是顯示原圖、灰度(gray)、和春夏秋冬的示例。
#coding=utf-8
from matplotlib import pyplot as plt
X = [[1,2],[3,4]]
fig = plt.figure()
ax = fig.add_subplot(231)
ax.imshow(X)
ax = fig.add_subplot(232)
ax.imshow(X, cmap=plt.cm.gray) #灰度
ax = fig.add_subplot(233)
im = ax.imshow(X, cmap=plt.cm.spring) #春
plt.colorbar(im)
ax = fig.add_subplot(234)
im = ax.imshow(X, cmap=plt.cm.summer)
plt.colorbar(im, cax=None, ax=None, shrink=0.5) #長度為半
ax = fig.add_subplot(235)
im = ax.imshow(X, cmap=plt.cm.autumn)
plt.colorbar(im, shrink=0.5, ticks=[-1,0,1])
ax = fig.add_subplot(236)
im = ax.imshow(X, cmap=plt.cm.winter)
plt.colorbar(im, shrink=0.5)
plt.show()
執行結果如下圖所示:
通常圖片都是由RGB組成,一塊一塊的,詳見我的數字影象處理系列部落格,這裡想把某塊顯示成一種顏色,則需要呼叫interpolation='nearest'引數即可,程式碼如下:
#coding=utf-8
from matplotlib import pyplot as plt
X = [[0, 0.25], [0.5, 0.75]]
fig = plt.figure()
ax = fig.add_subplot(121)
im = ax.imshow(X, cmap=plt.get_cmap('hot'))
plt.colorbar(im, shrink=0.5)
ax = fig.add_subplot(122)
im = ax.imshow(X, cmap=plt.get_cmap('hot'), interpolation='nearest',
vmin=0, vmax=1)
plt.colorbar(im, shrink=0.2)
plt.show()
執行結果如下圖所示:推薦文章:matplotlib imshow - default colour normalisation
預設情況下,imshow將資料標準化為最小和最大值。 您可以使用vmin和vmax引數或norm引數來控制(如果您想要非線性縮放)。
百度經驗提供一段程式碼,也不錯,推薦大家學習。
注意:相當於在A~J和a~j的影象矩陣中,產生10*10的隨機數,對矩陣進行顏色填充;只是在填充過程中,選擇隨機數的最大值和最小值進行標準化處理。
# coding=utf-8
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import cm
from matplotlib import axes
def draw_heatmap(data,xlabels,ylabels):
#cmap=cm.Blues
cmap=cm.get_cmap('rainbow',1000)
figure=plt.figure(facecolor='w')
ax=figure.add_subplot(1,1,1,position=[0.1,0.15,0.8,0.8])
ax.set_yticks(range(len(ylabels)))
ax.set_yticklabels(ylabels)
ax.set_xticks(range(len(xlabels)))
ax.set_xticklabels(xlabels)
vmax=data[0][0]
vmin=data[0][0]
for i in data:
for j in i:
if j>vmax:
vmax=j
if j<vmin:
vmin=j
map=ax.imshow(data,interpolation='nearest',cmap=cmap,aspect='auto',vmin=vmin,vmax=vmax)
cb=plt.colorbar(mappable=map,cax=None,ax=None,shrink=0.5)
plt.show()
a=np.random.rand(10,10)
print a
xlabels=['A','B','C','D','E','F','G','H','I','J']
ylabels=['a','b','c','d','e','f','g','h','i','j']
draw_heatmap(a,xlabels,ylabels)
執行結果如下圖所示:最後希望這篇文章對你有所幫助,該篇文章的重點知識不是畫圖,而是後續的研究:
1.如何通過熱圖來描繪人類動力學興趣轉換點;
2.影象處理感興趣的同學,會通過imshow()處理相關知識;
3.用熱圖顏色表示差異,體現矩陣資料的關注點。
同時推薦大家閱讀電子科技大學,趙志丹老師的博士論文《人類行為時空特性的分析建模及動力學研究》,下一篇文章我將簡單講述人類時空分析及結合Python繪圖簡單介紹。因為最近研究這方面知識,希望對你有所幫助,如果文章存在錯誤或不足之處,還請海涵。
真的好忙啊,都沒時間做很多自己喜歡的事情,寫文也是,但每當想起你,我這張醜臉上總會泛起微笑。加油,秀璋。娜娜,晚安!
(By:Eastmount 2017-06-19 晚上12點 http://blog.csdn.net/eastmount/ )
相關文章
- Matplotlib呼叫imshow()函式繪製熱圖函式
- 【python資料探勘課程】二十五.Matplotlib繪製帶主題及聚類類標的散點圖Python聚類
- 【python資料探勘課程】十.Pandas、Matplotlib、PCA繪圖實用程式碼補充PythonPCA繪圖
- 【Python資料探勘課程】七.PCA降維操作及subplot子圖繪製PythonPCA
- 【python資料探勘課程】十二.Pandas、Matplotlib結合SQL語句對比圖分析PythonSQL
- [1]Python 中用 matplotlib 繪製熱點圖(heat map)Python
- Matplotlib 系列之【繪製函式影像】函式
- Matplotlib 系列之【繪製函式影象】函式
- Python Matplotlib繪製條形圖的全過程Python
- 利用 Matplotlib 繪製資料圖形(一)
- 利用 Matplotlib 繪製資料圖形(二)
- 【Python資料探勘課程】六.Numpy、Pandas和Matplotlib包基礎知識Python
- Python matplotlib繪製散點圖Python
- python嶺跡圖繪製函式Python函式
- 資料視覺化之matplotlib實戰:plt.pie()函式 繪製餅狀圖視覺化函式
- Python Matplotlib繪製氣溫圖表Python
- 【python資料探勘課程】十一.Pandas、Matplotlib結合SQL語句視覺化分析PythonSQL視覺化
- Python 利用pandas和matplotlib繪製餅圖Python
- 使用python matplotlib實現動圖繪製Python
- python: matplotlib-繪製精美的圖表Python
- 分段函式圖形繪製函式
- 【python資料探勘課程】十四.Scipy呼叫curve_fit實現曲線擬合Python
- [Python] Matplotlib 圖表的繪製和美化技巧Python
- Python 利用pandas 和 matplotlib繪製柱狀圖Python
- Matplotlib直方圖繪製技巧直方圖
- python繪圖之matplotlibPython繪圖
- ## matplotlib.pyplot庫的知識點之bar函式——繪製條形圖函式
- 繪圖: Python matplotlib簡介繪圖Python
- 【計算機圖形學課程】一.MFC基本繪圖函式使用方法計算機繪圖函式
- Python 利用pandas和matplotlib繪製柱狀折線圖Python
- 小提琴圖的繪製方法:Python matplotlib實現Python
- python之matplotlib模組繪製常見的啟用函式及各啟用函式的優缺點Python函式
- 【原】使用Tkinter繪製GUI並結合Matplotlib實現互動式繪圖GUI繪圖
- 使用Matplotlib繪製3D圖形3D
- matplotlib的直方圖繪製(筆記)直方圖筆記
- 【python資料探勘課程】十三.WordCloud詞雲配置過程及詞頻分析PythonCloud
- python使用matplotlib繪圖詳解Python繪圖
- Python-matplotlib-入門教程(一)-基礎圖表繪製Python