Python数据可视化详解(2/5)--------色图与三维绘图
Python数据可视化详解(2/5)--------热力图
·
pcolor 和 imshow
contour 和 contourf
应用时应当使用 help 函数 仔细核对
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
x = y = np.linspace(-5,5,100)
x,y = np.meshgrid(x,y)
z = x+y
norm = mpl.colors.Normalize(-abs(z).max(),abs(z).max())
fig,axes = plt.subplots(2,2,figsize=(8,8))
axes[0][0].pcolor(x,y,z)
axes[1][0].contourf(x,y,z,10)
axes[1][1].contour(x,y,z,10)
plt.show()
热力图
import matplotlib.pyplot as plt
import numpy as np
#注意!
data = np.array([[5.17,4.53,3.86,3.48,3.11,2.82,2.54,0,0,0,0,0],[4.05,3.84,3.40,3.10,2.81,2.53,2.31,2.11,0,0,0,0],[3.22,3.26,2.96,2.75,2.52,2.26,2.07,1.91,1.60,0,0,0],[2.70,2.64,2.50,2.33,2.17,2.00,1.84,1.68,1.38,1.28,0,0],[2.29,2.18,2.08,1.94,1.84,0.17,1.54,1.46,1.19,1.1,0,0],[1.76,1.76,1.68,1.60,1.50,1.41,1.30,1.24,0.99,0.93,0.87,0],[1.35,1.37,1.31,1.22,1.16,1.11,1.01,0.97,0.78,0.72,0.67,0.67],[1.02,1.06,0.97,0.93,0.87,0.81,0.79,0.75,0.61,0.54,0.52,0.50],[0.66,0.66,0.58,0.54,0.54,0.49,0.49,0.48,0.38,0.33,0.32,0.31],[0.34,0.31,0.23,0.21,0.23,0.2,0.23,0.22,0.16,0.14,0.14,0.13],[0,0.05,0.12,0.15,0.12,0.09,0.05,0.03,0.04,0.07,0.05,0.05]]) #设置二维矩阵
f,ax = plt.subplots(figsize=(11,12))
#数据
#注意!
sns.heatmap(data, ax=ax,vmin=0,vmax=6,cmap='YlOrRd',annot=True,linewidths=2,cbar=True)
#热力图绘制代码
plt.title('heatmap')
plt.ylabel('y_label')
plt.xlabel('x_label')
label_y = plt.get_yticklabels()
label_x = plt.get_xticklabels()
plt.show()
效果图
参数控制:
- heatmap后第一个参数---------上面的数据集
- ax参数--------在哪张图上绘制
- cbar--------是否显示刻度条
- vmin和vmax--------右侧刻度条的范围
- annot=True(False)--------表示在对应位置(不)显示你的数据
- linewidths--------控制临近的两个方块的距离
- cmap--------控制渐变色
如下表(加r就是反着来的.....)
GnBu 由绿变蓝 summer 由黄到绿 Wistia 蓝绿黄
YIOrRd 红橙黄 summer_r 由绿到黄 coolwarm 蓝到红
hot 黄红黑 hot_r 黑红黄
例子
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
P2 = np.linspace(0,1,300)
P3 = np.linspace(0,1,300)
x,y = np.meshgrid(P2,P3)
M = 3
z = x*y**(M-1)/(1-x)/((1-y)**(M-1))
g,ax = plt.subplots(figsize=(46,29))
sns.heatmap(z,ax=ax,vmin=0,vmax=1,cmap='YlOrRd',annot=False,linewidths=0,cbar=True,xticklabels=False,yticklabels=False)
plt.xlabel("P2")
plt.ylabel("P3",rotation=True)
plt.title("the value of polynomial above where M="+str(M))
plt.show()
#plt.savefig("0.jpg")
三维绘图
- 引入 matplotlib 并设置中文显示和负号显示
import matplotlib.pyplot as plt
import numpy as np
import random
import matplotlib
matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
matplotlib.rcParams["axes.unicode_minus"] = False
- 设置图纸
fig = plt.figure()
#比二维图多一个“pro”
#位置参数也能加
ax = fig.add_subplot(1,2,1,projection="3d")
ax2 = fig.add_subplot(1,2,2,projection="3d")
- 绘制直线与散点图
- 绘制直线
#利用numpy生成一等差数列
t = np.linspace(-10,10)
z = 2*t
x = t
y = t
ax.plot(x,y,z,label="line plots")
ax.legend()
-
- 绘制散点图
x,y,z = [random.random() for i in range(10)],\
[random.random() for i in range(10)],\
[random.random() for i in range(10)]
ax2.scatter(x,y,z,s=5,c="r")
plt.show()
- plot_surface 绘制曲面
x = np.linspace(-10,10,100)
y = np.linspace(-10,10,100)
X,Y = np.meshgrid(x,y)
Z1 = X * Y
Z2 = X + Y
ax.plot_surface(X,Y,Z1)
ax2.plot_surface(X,Y,Z2)
plt.savefig("0.jpg")
更多推荐
所有评论(0)