[Python基礎] 6-Matplotlib:繪圖,可視化的必備

import numpy as np
import matplotlib.pyplot as plt

I.繪圖及設置
x = np.linspace(-np.pi,np.pi,256,endpoint=True)  # 設定x軸的範圍,點的個數,點的個數越多越平滑
c = np.cos(x)
s = np.sin(x)
plt.figure()  # 設定畫布
plt.title("COS & SIN")  # 設定擡頭
plt.plot(x,c,color="blue",linewidth=1.0,linestyle="-",label="cos",alpha=0.5)  # 畫圖並設置樣式
plt.plot(x,s,color="red",linestyle="--",label="sin")
plt.legend(loc="upper left")  # 設置圖例的位置
plt.grid()  # 設置網格線
# gca爲軸的編輯器
ax = plt.gca()
ax.spines["right"].set_color("none")  # 設置邊界的顏色
ax.spines["top"].set_color("none")
ax.spines["left"].set_position(("data",0))  # 設置邊界的位置
ax.spines["bottom"].set_position(("data",0))
ax.xaxis.set_ticks_position("bottom")  # 設置標籤的位置
ax.yaxis.set_ticks_position("left")
plt.yticks(np.linspace(-1,1,5,endpoint=True))  # 設置y軸的範圍
# for label in ax.get_xlabel()+ax.get_ylabel():
#     label.set_fontsize(188)
#     label.set_bbox(dict(facecolor="white",edgecolor="none",alpha=0))
plt.axis([-1,1,-0.5,1])  # 設定顯示範圍
plt.fill_between(x,np.abs(x)<0.5,c,c>0.5,color="green",alpha=0.5)  # 填充
# 輔助線的添加對應:橫軸方向的位置,縱軸方向的位置,顏色,寬度,線形
t = 0.75
plt.plot([t,t],[0,np.cos(t)],"black",linewidth=1.5,linestyle="--")
# 輔助點的標記,對應:名稱,位置(數字或者上述t均可),偏離,相對偏離,箭頭類型,箭頭弧度
# https://blog.csdn.net/u013457382/article/details/50956459 參考文檔
plt.annotate("cos(0.75)",xy=(0.75,np.cos(t)),xycoords="data",xytext=(+10,+30),textcoords="offset points",
             arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))

II.其他圖的畫法
fig=plt.figure()  # 設置畫布
1.散點圖
fig.add_subplot(3,3,1)
n = 128
X = np.random.normal(0,1,n)
Y = np.random.normal(0,1,n)
plt.xlim(-1.5,1.5),plt.xlim(-1.5,1.5)  # 設置x,y的範圍
plt.xticks(),plt.yticks()  # 設置軸標籤
plt.axis()  # 設定圖內容的顯示範圍
plt.title("Scatter")
plt.xlabel("x"),plt.ylabel("y")  # 設置橫縱座標的名稱
T = np.arctan2(Y,X)  # 設置顏色
plt.scatter(X,Y,s=75,c=T,alpha=0.5)  # 畫圖,s點的大小,c點的顏色,alpha透明度
2.柱狀圖
fig.add_subplot(3,3,2)
n = 10
X = np.arange(10)
Y1 = (1-X/float(n)*np.random.uniform(0.5,1.0,n))
Y2 = (1-X/float(n)*np.random.uniform(0.5,1.0,n))
plt.bar(X,Y1,facecolor="#9999ff",edgecolor="black")
plt.bar(X,-Y2,facecolor="#ff9999",edgecolor="white")
# 設置並添加註釋
for x,y in zip(X,Y1):
    plt.text(x+0.4,y+0.05,"%2f"%y,ha="center",va="bottom",size=6)
for x,y in zip(X,Y2):
    plt.text(x+0.4,-y-0.05,"%2f"%y,ha="center",va="top")
3.餅圖
fig.add_subplot(3,3,3)
# 設定Z,等分,最後一個佔2份
n = 20
Z = np.ones(n)
Z[-1] *= 2
# 畫圖,數據源,分離程度,顏色,標籤
plt.pie(Z,explode=Z*0.05,colors=['%f'%(i/float(n)) for i in range(n)],
        labels=['%.2f'%(i/float(n)) for i in range(n)])
plt.gca().set_aspect("equal")  # 讓圖是一個正的圓形
plt.xticks([]),plt.yticks([])
4.極座標
fig.add_subplot(3,3,4,polar=True)
n = 20
theta = np.arange(0.0,2*np.pi,2*np.pi/n)
radii = 10*np.random.rand(n)
plt.polar(theta,radii)
5.熱圖
fig.add_subplot(3,3,5)
from matplotlib import cm
data = np.random.rand(3,3) # 設定數據
cmap = cm.Blues  # 顏色設定並畫圖,aspect:自動調整
map = plt.imshow(data,cmap=cmap,aspect="auto",vmin=0,vmax=1)
6.3D圖
from mpl_toolkits.mplot3d import Axes3D
ax = fig.add_subplot(3,3,6,projection="3d")
ax.scatter(1,1,3,s=100)
7.熱力圖
fig.add_subplot(3,1,3)
def f(x,y):
    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n)
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y)
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)

plt.show()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章