•1、堆積圖
20名學生,它們的編號分別是0-19,y1、y2、y3分別代表本次月考他們的語文、數學和英語的成績。
兩種圖形:柱狀堆積圖和條狀堆積圖
(1)柱狀堆積圖
import matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False# 生成數據x = np.linspace(0, 20, 20)y1 = np.random.randint(50, 100, 20)y2 = np.random.randint(50, 100, 20)y3 = np.random.randint(50, 100, 20)
# 堆積柱狀圖plt.bar(x, y1, color='r', label='語文')plt.bar(x, y2, bottom=y1, color='g', label='數學')plt.bar(x, y3, bottom=y1+y2, color='c', label='英語')
# 顯示範圍plt.xlim(-2, 22)plt.ylim(0, 300)
# 添加圖例plt.legend(loc='upper right')plt.grid(axis='y', color='gray', linestyle=':', linewidth=2)
plt.show()(2)條狀堆積圖
import matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False# 生成數據x = np.linspace(0, 20, 20)y1 = np.random.randint(50, 100, 20)y2 = np.random.randint(50, 100, 20)y3 = np.random.randint(50, 100, 20)
# 堆積柱狀圖plt.barh(x, y1, color='r', label='語文')plt.barh(x, y2, left=y1, color='g', label='數學')plt.barh(x, y3, left=y1+y2, color='c', label='英語')
# 顯示範圍plt.ylim(-2, 22)plt.xlim(0, 300)
# 添加圖例plt.legend(loc='lower right')
plt.show()•2、堆積折線圖
小明參加了20次月考,想看下他的總成績以及語數外三科成績的變化趨勢。
import matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False# 生成數據# 假設一個班裡有20名學生,x代表他們的編號,y1/y2/y3分別是他們本次月考的成績。x = np.linspace(0, 20, 20)y1 = np.random.randint(50, 100, 20)y2 = np.random.randint(50, 100, 20)y3 = np.random.randint(50, 100, 20)
# 堆積柱狀圖plt.stackplot(x, y1, y2, y3, baseline='zero', labels=['語文', '數學', '英語'], colors=['r', 'g', 'c'])
# 顯示範圍plt.xlim(-2, 22)plt.ylim(0, 300)
# 添加圖例和網格線plt.legend(loc='upper right')plt.grid(axis='y', color='gray', linestyle=':', linewidth=2)
plt.show()3、並列柱狀圖
多數據並列柱狀圖和多數據平行條形圖
在matplotlib中ticks表示的是刻度,而刻度有兩層意思,一個是刻標(locs),一個是刻度標籤(ticklabels)。在作圖時,x軸y軸都是連續的,所以刻標可以隨意指定,就是在連續變量上找尋位置,而刻度標籤則可以對應替換
xticks()返回了兩個對象,一個是刻標(locs),另一個是刻度標籤
locs, labels = xticks() # 顯示x軸的刻標
xticks( arange(6) ) # 顯示x軸的刻標以及對應的標籤
xticks( arange(5), ('Tom', 'Dick', 'Harry', 'Sally', 'Sue') )
(1)多數據並列柱狀圖
import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False
x = np.arange(13)y2017=[141103,160706,75611,140435,162388,105903,58577,67909,70216,112559,125962,102058,53317,]y2016=[129194,143985,67701,124889,148146,94304,53626,63083,64065,100644,122686,89785,48797]bar_width=0.2tick_label=["南京","無錫","徐州","常州", "蘇州","南通","連雲港","淮安","鹽城","揚州","鎮江","泰州","宿遷"]plt.bar(x,y2016,bar_width,align="center",color="r",label="2016",alpha=0.5)plt.bar(x+bar_width,y2017,bar_width,align="center",color="b",label="2017",alpha=0.5)
plt.xlabel('地級市')plt.ylabel('人均GDP')plt.xticks(x+bar_width/2,tick_label) #xsticks與yticks:指定坐標軸的刻度plt.legend()plt.show()(2)多數據平行條形圖
import numpy as npimport pandas as pdimport matplotlib as mplimport matplotlib.pyplot as pltmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False
x = np.arange(13)y2017=[141103,160706,75611,140435,162388,105903,58577,67909,70216,112559,125962,102058,53317,]y2016=[129194,143985,67701,124889,148146,94304,53626,63083,64065,100644,122686,89785,48797]bar_width=0.2tick_label=["南京","無錫","徐州","常州", "蘇州","南通","連雲港","淮安","鹽城","揚州","鎮江","泰州","宿遷"]plt.barh(x,y2016,bar_width,align="center",color="r",label="2016",alpha=0.5)plt.barh(x+bar_width,y2017,bar_width,align="center",color="b",label="2017",alpha=0.5)
plt.xlabel('人均GDP')plt.ylabel('地級市')plt.yticks(x+bar_width/2,tick_label) #xsticks與yticks:指定坐標軸的刻度plt.legend()plt.show()4.多個折線圖
import matplotlib.pyplot as pltimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']# 構造數據y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]# 傳入2組分別代表X軸、Y軸的數據
plt.plot(x_data, y_data,label="C語言教程",color="b")plt.plot(x_data, y_data2,label="Python教程",color="r")# 調用show()函數顯示圖形# 添加兩組代表折線的數據plt.xlabel('銷量')#設置X軸標籤plt.ylabel('年份')#設置Y軸標籤plt.legend()plt.show()5.堆積折線圖
import matplotlib.pyplot as pltimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False
x_data = ['2011', '2012', '2013', '2014', '2015', '2016', '2017']# 構造數據y_data = [58000, 60200, 63000, 71000, 84000, 90500, 107000]y_data2 = [52000, 54200, 51500,58300, 56800, 59500, 62700]# 傳入2組分別代表X軸、Y軸的數據labels=["C語言教程","Python教程"]colors=["b","r"]plt.stackplot(x_data, y_data, y_data2,labels=labels,colors=colors)# 調用show()函數顯示圖形# 添加兩組代表折線的數據plt.xlabel('銷量')#設置X軸標籤plt.ylabel('年份')#設置Y軸標籤plt.legend()plt.show()6.三維圖形
(1)3d曲面圖
ax.plot_surface(X,Y, Z, rstride=1, cstride=1, cmap='rainbow')
from matplotlib import pyplot as pltimport numpy as npfrom mpl_toolkits.mplot3d import Axes3Dimport matplotlib as mplmpl.rcParams['font.sans-serif'] = ['KaiTi']mpl.rcParams['axes.unicode_minus'] = False
fig = plt.figure()ax = Axes3D(fig)# 生成代表X軸數據的列表X = np.arange(-4, 4, 0.25)# 生成代表Y軸數據的列表Y = np.arange(-4, 4, 0.25)# 對x、y數據執行網格化X, Y = np.meshgrid(X, Y)R = np.sqrt(X**2 + Y**2) #函數sqrt(x**2+y**2)# 計算Z軸數據(高度數據)Z = np.sin(R)
# 具體函數方法可用 help(function) 查看,如:help(ax.plot_surface)# rstride(row)指定行的跨度,cstride(column)指定列的跨度# cmap設置顏色映射ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')# 設置標題plt.title("3D曲面圖")plt.show()(2)3d散點圖
.pyax.scatter(x[1000:4000],y[1000:4000],z[1000:4000],c='r')#繪點
import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D
data = np.random.randint(0, 255, size=[40, 40, 40])
x, y, z = data[0], data[1], data[2]ax = plt.subplot(111, projection='3d') # 創建一個三維的繪圖工程# 將數據點分成三部分畫,在顏色上有區分度ax.scatter(x[:10], y[:10], z[:10], c='y') # 繪製數據點ax.scatter(x[10:20], y[10:20], z[10:20], c='r')ax.scatter(x[30:40], y[30:40], z[30:40], c='g')
ax.set_zlabel('Z') # 坐標軸ax.set_ylabel('Y')ax.set_xlabel('X')plt.show()加入微信群「數據小蟲」,有更多驚喜!
在公眾號,或微信群留言,有更多最新數據!
公眾號會每天推薦相關數據,所有來自網際網路原始數據或資源,部分經過了處理,或者作者計算整理過,請需要者限於科研用,不得商用,出現糾紛與本公眾號無關。
請關注公眾號二維碼,並推薦給更多的朋友。