目錄
Python數據處理從零開始----第四章(可視化)①③多變量繪圖
Python數據處理從零開始----第四章(可視化)(14)使用seaborn繪制熱圖
seaborn.heatmapHeat maps顯示數字表格數據,其中單元格根據包含的值著色。 熱圖非常適合使這種數據的趨勢更加明顯,特別是在訂購數據并且存在聚類時。
vmin, vmax : 顯示的數據值的最大和最小的范圍
ax = sns.heatmap(data,vmin=0, vmax=1)
**cmap : matplotlib顏色表名稱或對象,或顏色列表,可選從數據值到色彩空間的映射。
ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu')
center : 指定色彩的中心值
ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.7)
robust : 如果“Ture”和“ vmin或” vmax不存在,則使用強分位數計算顏色映射范圍,而不是極值。
ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.5,
robust=False) #Set1
annot如果為True,則將數據值寫入每個單元格中
ax = sns.heatmap(data,vmin=0, vmax=1, cmap = 'GnBu', center=0.5,
robust=False,annot=True) #Set1
fmt : 表格里顯示數據的類型
fmt ='.0%'#顯示百分比
fmt ='f' 顯示完整數字 = fmt ='g'
fmt ='.3'顯示小數的位數 = fmt ='.3f' = fmt ='.3g'
linewidths : 劃分每個單元格的線的寬度。
linecolor:劃分每個單元格的線的顏色。
cbar : 是否繪制顏色條:colorbar,默認繪制
cbar_kws : 未知 **cbar_ax : **顯示x-y坐標,而不是節點的編號
square : 為‘True’時,整個網格為一個正方形
xticklabels, yticklabels : 可以以字符串進行命名,也可以調節編號的間隔,也可以不顯示坐標
ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square = False,
xticklabels =['12','22'])#字符串命名
ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square = False,
xticklabels =2)#編號間隔為2
ax = sns.heatmap(uniform_data,cmap = 'RdBu', center=0,cbar = True, square = False,
xticklabels =False)#不顯示坐標
舉例說明:
繪制一個numpy數組的熱圖:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
image
更改色彩圖的限制:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data, vmin=0, vmax=1)
image
以0為中心的數據繪制熱圖:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
normal_data = np.random.randn(10, 12)
ax = sns.heatmap(normal_data, center=0)
image
用有意義的行和列標簽繪制數據框:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights)
image
使用整數格式用數值注釋每個單元格:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, annot=True, fmt="d")
image
在每個單元格之間添加行:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, linewidths=.5)
image
使用不同的顏色表:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, cmap="YlGnBu")
image
以特定值居中色彩圖:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax = sns.heatmap(flights, center=flights.loc["January", 1955])
image
繪制每個其他列標簽并且不要繪制行標簽:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
data = np.random.randn(50, 20)
ax = sns.heatmap(data, xticklabels=2, yticklabels=False)
image
不要繪制顏色條:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
data = np.random.randn(10, 10)
ax = sns.heatmap(data, cbar=False)
image
對色條使用不同的軸:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
flights = sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
grid_kws = {"height_ratios": (.9, .05), "hspace": .3}
f, (ax, cbar_ax) = plt.subplots(2, gridspec_kw=grid_kws)
ax = sns.heatmap(flights, ax=ax,cbar_ax=cbar_ax,cbar_kws={"orientation": "horizontal"})
image
使用掩碼只繪制矩陣的一部分:
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
corr = np.corrcoef(np.random.randn(10, 200))
mask = np.zeros_like(corr)
mask[np.triu_indices_from(mask)] = True
with sns.axes_style("white"):
ax = sns.heatmap(corr, mask=mask, vmax=.3, square=True)
image
import numpy as np; np.random.seed(0)
import seaborn as sns; sns.set()
import matplotlib.pyplot as plt
data = np.random.rand(10, 12)
f, ax = plt.subplots(figsize=(8,5))
ax = sns.heatmap(data,cmap = 'RdBu',ax=ax,vmin=0, vmax=1,annot=True,fmt ='0.1g')
#設置坐標字體方向
label_y = ax.get_yticklabels()
plt.setp(label_y, rotation=45, horizontalalignment='right')
label_x = ax.get_xticklabels()
plt.setp(label_x, rotation=45, horizontalalignment='right')
plt.xlabel('x.num')#設置坐標名稱
plt.ylabel('y.num')
plt.title('Plotting')#標題
plt.show()
image