import numpy as np
import matplotlib.pyplot as plt #匯入matplotlib庫中的pyplot並起別名為plt
%matplotlib inline #讓圖表直接在Jupyter Notebook中展示出來
plt.rcParams["font.sans-serif"]='SimHei' #解決中文亂碼的問題
plt.rcParams['axes.unicode_minus']=False #解決負號無法正常顯示的問題
%config InlineBackend.figure_format='svg' #將圖表設定成向量圖
"""
#例項一:繪製XXX公司1-9月份註冊使用者量的圖表--折線圖
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
plt.plot(x,y,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=5,label="註冊使用者數")
plt.title("繪製XXX公司1-9月份註冊使用者量",loc="center")
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va="bottom",fontsize=10) #新增資料標籤
plt.grid(True) #設定網格線
plt.xlabel("月份",labelpad=10) #labelpad為到數軸的距離
plt.ylabel("註冊人數",labelpad=10) #labelpad為到數軸的距離
plt.legend() #設定圖例
plt.savefig("d:\mypythontest\折線圖.jpg")
"""
#實列二:繪製全國各分割槽任務量的圖表--柱狀圖
plt.subplot(1,1,1)
x=np.array(['東區','北區','南區','西區'])
y=np.array([8566,6482,5335,7310])
plt.bar(x,y,width=0.5,align='center',label='任務量')
plt.title("全國各分割槽任務量",loc="center")
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize=12)
plt.xlabel('分割槽')
plt.ylabel('任務量')
plt.legend()
plt.savefig("d:\mypythontest\柱狀圖.jpg")
#實列三:繪製全國各分割槽任務量的圖表--簇狀柱形圖
plt.subplot(1,1,1)
x=np.array([1,2,3,4])
y1=np.array([8566,5335,7310,6482])
y2=np.array([4283,2667,3655,3241])
plt.bar(x,y1,width=0.3,label="任務量") #柱狀圖的寬度為0.3
plt.bar(x+0.3,y2,width=0.3,label="完成量") #x+0.3相當於完成柱狀圖右移0.3
plt.title("全國各分割槽任務量和完成量",loc="center")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
for a,b in zip(x+0.3,y2):
plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
plt.xlabel('區域')
plt.ylabel('任務情況')
plt.xticks(x+0.15,["東區","南區","西區","北區"])
plt.legend
plt.savefig("d:\mypythontest\簇狀柱狀圖.jpg")
#實列四:繪製全國各分割槽任務量的圖表--堆積柱形圖
plt.subplot(1,1,1)
x=np.array(["東區","北區","南區","西區"])
y1=np.array([8566,6482,5335,7310])
y2=np.array([4283,3241,2667,3655])
plt.bar(x,y1,width=0.3,label="任務量")
plt.bar(x,y2,width=0.3,label="完成量")
plt.title("全國各分割槽任務量和完成量",loc="center")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va="bottom",fontsize=12)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va="top",fontsize=12)
plt.xlabel("區域")
plt.ylabel("任務情況")
plt.legend()
plt.savefig("d:\mypythontest\堆積柱狀圖.jpg")
#實列五:繪製全國各分割槽任務量的圖表--條形圖
plt.subplot(1,1,1)
x=np.array(["東區","北區","南區","西區"])
y=np.array([8566,6482,5335,7310])
plt.barh(x,height=0.5,width=y,align="right")
plt.title("全國各分割槽任務量",loc="center")
for a,b in zip(x,y):
plt.text(b,a,b,ha="left",va="center",fontsize=12) #水平居左,不重疊
plt.xlabel("任務量")
plt.ylabel("區域")
plt.legend()
plt.savefig("d:\mypythontest\條形圖.jpg")
#實列六:繪製平均氣溫與啤酒銷量關係的圖表--散點圖
plt.subplot(1,1,1)
x=[5.5,6.6,8.1,15.8,19.5,22.4,28.3,28.9]
y=[2.38,3.85,4.41,5.67,5.44,6.03,8.15,6.87]
plt.scatter(x,y,marker="o",s=100)
plt.title("1-8月平均氣溫與啤酒銷量關係圖",loc="center")
plt.xlabel("平均氣溫")
plt.ylabel("啤酒銷量")
plt.legend
plt.savefig("d:\mypythontest\散點圖.jpg")
#實列七:繪製平均氣溫與啤酒銷量關係的圖表--氣泡圖
plt.subplot(1,1,1)
x=np.array([5.5,6.6,8.1,15.8,19.5,22.4,28.3,28.9])
y=np.array([2.38,3.85,4.41,5.67,5.44,6.03,8.15,6.87])
colors=y*10 #根據y值的大小生成不同的顏色
area=y*100 #根據y值的大小生成大小不同的形狀
plt.scatter(x,y,c=colors,marker="o",s=area)
plt.title("1-8月平均氣溫與啤酒銷量關係圖",loc="center")
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='center',fontsize=10,color='white')
plt.xlabel('平均氣溫')
plt.ylabel('啤酒銷量')
plt.legend()
plt.savefig("d:\mypythontest\氣泡圖.jpg")
#實列八:繪製平均氣溫與啤酒銷量關係的圖表--面積圖
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
labels=["註冊人數","啟用人數"]
plt.stackplot(x,y1,y2,labels=labels)
plt.title("XXX公司1-9月註冊與啟用人數",loc="center")
plt.xlabel('月份')
plt.ylabel('註冊人數與啟用人數')
plt.legend()
plt.savefig("d:\mypythontest\面積圖.jpg")
#例項九:繪製同一等級中不同類別的佔比關係--樹地圖
import squarify
size=np.array([3.4,0.693,0.585,0.570,0.562,0.531,0.530,0.524,0.501,0.478,0.468,0.436])
#指定每一塊的大小
xingzuo=np.array(["未知","魔蠍座","天秤座","雙魚座","天蠍座","金牛座","處女座","雙子座","射手座","獅子座","水瓶座","白羊座"])
#指定每一塊的文字標籤
rate=np.array(["34%","6.93%","5.85%","5.70%","5.62%","5.31%","5.30%","5.24%","5.01%","4.78%","4.68%","4.36%"])
#指定每一塊的數值標籤
colors=["steelblue","#9999ff","red","indianred","green","yellow","orange"]
#指定每一塊的顏色
plot=squarify.plot(sizes=size,label=xingzuo,color=colors,value=rate,edgecolor="white",linewidth=3)
plt.title("菊粉星座分佈",fontdict={'fontsize':12})
plt.axis('off') #去除座標軸
plt.tick_params(top="off",right="off") #去除上邊框和右邊框的刻度
plt.savefig("d:\mypythontest\樹地圖.jpg")
#例項十:綜合評價某一事物的優勢和不足--雷達圖
plt.subplot(1,1,1,polar=True) #引數polar=True表示建立一個極座標
dataLenth=5
angles=np.linspace(0,2*np.pi,dataLenth,endpoint=False)
#linspace引數:從0開始,2Π結束,共5等分
labels=['溝通能力','業務理解能力','邏輯思維能力','快速學習能力','工具使用能力']
data=[2,3.5,4,4.5,5]
data=np.concatenate((data,[data[0]])) #形成閉合 [2,3.5,4,4.5,5,2]
angles=np.concatenate((angles,[angles[0]]))
#形成閉合 [0,2/5Π,4/5Π,6/5Π,8/5Π,2Π,0]
plt.polar(angles,data,color='r',marker="o")
#繪製雷達圖:角度(0-2Π-0),5個數據,標記為圓點
plt.xticks(angles,labels) #在這5個角度上做5個標籤
plt.title(label="某資料分析師的綜合評級")
plt.savefig("d:\mypythontest\雷達圖.jpg")
#例項十一:反應一組資料的離散情況--箱型圖
plt.subplot(1,1,1)
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
x=[y1,y2] #兩箱組合
labels=["註冊人數","啟用人數"]
plt.boxplot(x,labels=labels,vert=True,widths=[0.2,0.5]) #widths為分別寬度
plt.title("XXX公司1-9月份註冊人數與啟用人數",loc="center")
plt.grid(True)
plt.savefig("d:\mypythontest\箱型圖.jpg")
#例項十二:同一等級中不同類別之間的佔比情況--餅圖
plt.subplot(1,1,1)
x=np.array([8566,5335,7310,6482])
labels=["東區","北區","南區","西區"]
explode=[0.05,0,0,0] #四個塊離開圓心的距離,其中第一個塊為0.05,其餘為0,0,0
labeldistance=1.1 #標籤遠離中心的距離
plt.pie(x,labels=labels,autopct='%.0f%%',shadow=True,
explode=explode,radius=1.0,labeldistance=labeldistance)
#shadow為餅是否有陰影,radius為餅的半徑
plt.title("全國各區域任務量佔比",loc="center")
plt.savefig("d:\mypythontest\餅圖.jpg")
#例項十三:同一層級中不同類別之間的佔比情況--圓環圖
plt.subplot(1,1,1)
x1=np.array([8566,5335,7310,6482])
x2=np.array([4283,2667,3655,3241])
labels=["東區","北區","南區","西區"]
plt.pie(x1,labels=labels,radius=1.0,
wedgeprops=dict(width=0.3,edgecolor='w')) #wedgeprops內外邊界,生成餅圖
plt.pie(x2,radius=0.7,wedgeprops=dict(width=0.3,edgecolor='w'))
plt.annotate("完成量",xy=(0.35,0.35),xytext=(0.7,0.45),
arrowprops=dict(facecolor='black',arrowstyle='->'))
plt.annotate("任務量",xy=(0.75,0.20),xytext=(1.1,0.2),
arrowprops=dict(facecolor='black',arrowstyle='->'))
plt.title("全國各區域任務量與完成量佔比",loc="center")
plt.savefig("d:\mypythontest\圓環圖.jpg")
#例項十四:反映某一事物的響應度,可以快速發現需要重點關注的區域--熱力圖
import itertools
cm=np.array([[1,0.082,0.031,-0.0086],
[0.082,1,-0.09,0.062],
[0.031,-0.09,1,0.026],
[-0.0086,0.062,0.026,1]])
cmap=plt.cm.cool #設定配色方案
plt.imshow(cm,cmap=cmap)
plt.colorbar() #顯示右邊的顏色條的顏色條
classes=["負債率","信貸數量","年齡","家屬數量"]
tick_marks=np.arange(len(classes))
plt.xticks(tick_marks,classes) #設定x軸的刻度標籤
plt.yticks(tick_marks,classes) #設定y軸的刻度標籤
for i,j in itertools.product(range(cm.shape[0]),range(cm.shape[1])):
plt.text(j,i,cm[i,j],horizontalalignment="center")
plt.grid(False)
plt.savefig("d:\mypythontest\熱力圖.jpg")
#例項十五:繪製水平線和垂直線
plt.subplot(1,2,1)
plt.axhline(y=2,xmin=0.2,xmax=0.6) #繪製y=2(x∈[0.2,0.6])的直線
plt.subplot(1,2,2)
plt.axvline(x=2,ymin=0.2,ymax=0.6) #繪製x=2(y∈[0.2,0.6])的直線
#例項十六:組合圖表--折線圖+折線圖
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,color="k",linestyle="solid",linewidth=1,marker="o",markersize=3,label="註冊人數")
plt.plot(x,y2,color="k",linestyle="dashdot",linewidth=1,marker="o",markersize=3,label="啟用人數")
plt.title("XXX公司1-9月份註冊與啟用人數",loc="center")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va='bottom',fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va='bottom',fontsize=11)
plt.xlabel('月份')
plt.ylabel('註冊量')
plt.xticks(np.arange(1,10,1),['1月份','2月份','3月份',
'4月份','5月份','7月份','8月份','9月份'])
plt.yticks(np.arange(1000,7000,1000),['1000人','2000人','3000人','4000人','5000人','6000人'])
plt.legend()
plt.savefig("d:\mypythontest\雙摺線組合圖.jpg")
#例項十七:組合圖表--折線圖+柱形圖
plt.subplot(1,1,1)
x=np.array([1,2,3,4,5,6,7,8,9])
y1=np.array([866,2335,5710,6482,6120,1605,3813,4428,4631])
y2=np.array([433,1167,2855,3241,3060,802,1906,2214,2315])
plt.plot(x,y1,color="k",linestyle="solid",linewidth=1,marker="o",markersize=3,label="註冊人數")
plt.bar(x,y2,color="k",label="啟用人數")
plt.title("XXX公司1-9月份註冊人數與啟用人數")
for a,b in zip(x,y1):
plt.text(a,b,b,ha="center",va='bottom',fontsize=11)
for a,b in zip(x,y2):
plt.text(a,b,b,ha="center",va='bottom',fontsize=11)
plt.xlabel('月份')
plt.ylabel('註冊量')
plt.xticks(np.arange(1,10,1),['1月份','2月份','3月份',
'4月份','5月份','7月份','8月份','9月份'])
plt.yticks(np.arange(1000,7000,1000),['1000人','2000人','3000人','4000人','5000人','6000人'])
plt.legend()
plt.savefig("d:\mypythontest\折線圖與柱形圖組合.jpg")
#例項十八:呼叫matplotlib式樣庫
呼叫方法:plt.style.use(式樣名)
式樣庫包括:'bmh'、'classic'、'dark_background'、'fast'、'classic'、'fivethirtyeight'
'ggplot'、'grayscale'、'seaborn-bright'等