Matplotlib 是 Python 的一個2D繪圖庫,可以幫助我們繪制各種圖形,下面介紹一些最常見的數學圖形繪制方法。
1.直線圖
import numpy as np import matplotlib.pyplot as plt x = np.arange(1,6) y = 2 * x plt.title("LineGraph") #標題名 plt.xlabel("x axis") #x軸標注 plt.ylabel("y axis") #y軸標注 plt.plot(x,y) #以x為橫坐標,y為縱坐標,按照(x,y)的順序繪圖 plt.show() #顯示圖像
運行結果:
關於上述代碼中的plot函數,調用形式一般為:
plot([x], y, [fmt], data=None, **kwargs)
plot([x], y, [fmt], [x2], y2, [fmt2], …, **kwargs)
其中,fmt = [color][marker][linestyle],用於定義圖的基本屬性:顏色(color)、點型(marker)、線型(linestyle)。
**kwargs參數包括:x軸數據、y軸數據、線寬(linewidth)、線條顏色(color)。
通常,如果需要在一張圖中繪制不同類別的數據點時,可以通過設置plot()參數來區分不同類別的點和相應的直線。
例如,我們可以將上述代碼改為:
import numpy as np import matplotlib.pyplot as plt import matplotlib # 設置matplotlib顯示中文和負號 matplotlib.rcParams['font.sans-serif']=['SimHei'] # 顯示中文為黑體 matplotlib.rcParams['axes.unicode_minus']=False # 正常顯示負號 x1 = np.arange(-5,6) y1 = 2 * x x2 = np.arange(-5,6) y2 = x / 2 plt.title("直線圖") plt.xlabel("x軸") plt.ylabel("y軸") plt.plot(x1,y1,'-.ro') #線形為點橫線,數據點形狀為圓圈,線條和數據點顏色為紅色 plt.plot(x2,y2,':b+') #線形為點線,數據點形狀為加號,線條和數據點顏色為藍色 plt.show()
運行結果:
2.sin、cos函數圖
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-np.pi, np.pi, 256, endpoint=True) #獲取x坐標 s, c = np.sin(x), np.cos(x) #獲取y坐標 plt.plot(x, s,"r-") plt.plot(x, c,"g-") plt.show()
運行結果:
3.條形圖
pyplot 子模塊提供 bar() 函數來生成條形圖。
import numpy as np import matplotlib.pyplot as plt from matplotlib import pyplot as plt x1 = [1,3,5] y1 = [1,2,3] x2 = [2,4,6] y2 = [3,2,1] plt.bar(x1, y1, facecolor='#9999ff', edgecolor='r') plt.bar(x2, y2, facecolor='c', edgecolor='k') plt.title('條形圖') plt.xlabel('x軸') plt.ylabel('y軸') plt.show()
運行結果:
4.折線圖
import matplotlib.pyplot as plt x = [1,3,6,7,9,12] y = [8,2,4,1,9,9] plt.plot(x, y, 'rp-', markersize=10) plt.title('折線圖') plt.xlabel('x軸') plt.ylabel('y軸') plt.show()
運行結果:
5.直方圖
import matplotlib.pyplot as plt import numpy as np import matplotlib # 隨機生成(10000,)服從正態分布的數據 data = np.random.randn(10000) # data:繪圖數據 # bins:直方圖的長條形數目,默認為10。 # density:是否將得到的直方圖向量歸一化,density默認為0代表不歸一化,顯示頻數;density=1表示歸一化,顯示頻率。 # facecolor:長條形的顏色 # edgecolor:長條形邊框的顏色 # alpha:透明度 plt.hist(data, bins=50, density=1, facecolor="m", edgecolor="k", alpha=0.5) plt.title('直方圖') plt.xlabel('區間') plt.ylabel('頻率') plt.show()
運行結果:
6.餅圖
import matplotlib.pyplot as plt import matplotlib #以一個人數為60的班的學生考試成績為例 label_list = ["0-59分", "60-70分", "70-80分", "80-90分", "90-100分"] #餅圖各部分標簽,對成績划分區間 size = [3, 12, 15, 25, 5] #餅圖各部分大小,各區間對應人數 color = ["#EB7AD4", "#76BFF0", "c", "#EFAA98", "#AA8ADC"] #餅圖各部分顏色 explode = [0, 0, 0, 0.1, 0] # 設置突出值 # labeldistance:設置標簽文本距圓心位置,1.1表示1.1倍半徑 # autopct:設置圓里面文本 # shadow:設置是否有陰影 # startangle:起始角度,默認從0開始逆時針轉 # pctdistance:設置圓內文本距圓心距離 # patches:返回值 # l_text:圓內部文本 # p_text:圓外部文本 patches, l_text, p_text = plt.pie(size, explode=explode, colors=color, labels=label_list, labeldistance=1.12, autopct="%1.1f%%", shadow=True, startangle=90, pctdistance=0.8) plt.axis("equal") # 設置橫軸和縱軸大小相等,這樣餅才是圓的 plt.legend() plt.show()
運行結果: