一.Matplotlib介紹
Matplotlib是一個Python的2D繪圖庫,它以各種硬拷貝格式和跨平台的交互式環境生成出版質量級別的圖形。通過Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,折線圖、散點圖、柱狀圖、餅圖、直方圖、子圖等。Matplotlib使用NumPy進行數組運算,並調用一系列其他的Python庫來實現硬件交互。
二.繪圖示例
環境:Python(3.5.2)、Jupyter(1.0.0) Ubuntu安裝Jupyter Notebook
1.折線圖
%matplotlib inline import matplotlib.pyplot as plt import numpy as np x = np.arange(9) y = np.sin(x) z = np.cos(x) # marker數據點樣式,linewidth線寬,linestyle線型樣式,color顏色 plt.plot(x, y, marker="*", linewidth=3, linestyle="--", color="orange") plt.plot(x, z) plt.title("matplotlib") plt.xlabel("height") plt.ylabel("width") # 設置圖例 plt.legend(["Y","Z"], loc="upper right") plt.grid(True) plt.show()
2.散點圖
x = np.random.rand(10) y = np.random.rand(10) plt.scatter(x,y) plt.show()
3.柱狀圖
x = np.arange(10) y = np.random.randint(0,30,10) plt.bar(x, y) plt.show()
4.餅圖
x = np.random.randint(1, 10, 3)
plt.pie(x)
plt.show()
5.直方圖
mean, sigma = 0, 1 x = mean + sigma * np.random.randn(10000) plt.hist(x,50) plt.show()
6.子圖
# figsize繪圖對象的寬度和高度,單位為英寸,dpi繪圖對象的分辨率,即每英寸多少個像素,缺省值為80 plt.figure(figsize=(8,6),dpi=100) # subplot(numRows, numCols, plotNum)
# 一個Figure對象可以包含多個子圖Axes,subplot將整個繪圖區域等分為numRows行*numCols列個子區域,按照從左到右,從上到下的順序對每個子區域進行編號
# subplot在plotNum指定的區域中創建一個子圖Axes A = plt.subplot(2,2,1) plt.plot([0,1],[0,1], color="red") plt.subplot(2,2,2) plt.title("B") plt.plot([0,1],[0,1], color="green") plt.subplot(2,1,2) plt.title("C") plt.plot(np.arange(10), np.random.rand(10), color="orange") # 選擇子圖A plt.sca(A) plt.title("A") plt.show()
三.自定義X軸刻度
1.數字格式
%matplotlib inline import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import MultipleLocator, FormatStrFormatter x = np.arange(30) y = np.sin(x) plt.figure(figsize=(12,6)) plt.plot(x, y) # 設置X軸的刻度間隔 plt.gca().xaxis.set_major_locator(MultipleLocator(3)) # 設置X軸的刻度顯示格式 plt.gca().xaxis.set_major_formatter(FormatStrFormatter("%d-K")) # 自動旋轉X軸的刻度,適應坐標軸 plt.gcf().autofmt_xdate() plt.show()
2.時間格式
%matplotlib inline import matplotlib.pyplot as plt import numpy as np import datetime from matplotlib.dates import DayLocator, DateFormatter x = [datetime.date.today() + datetime.timedelta(i) for i in range(30)] y = np.sin(np.arange(30)) plt.figure(figsize=(12,6)) plt.plot(x, y) # 設置X軸的時間間隔,MinuteLocator、HourLocator、DayLocator、WeekdayLocator、MonthLocator、YearLocator plt.gca().xaxis.set_major_locator(DayLocator(interval=3)) # 設置X軸的時間顯示格式 plt.gca().xaxis.set_major_formatter(DateFormatter('%y/%m/%d')) # 自動旋轉X軸的刻度,適應坐標軸 plt.gcf().autofmt_xdate() plt.show()