衆所周知,經過數據繪圖,咱們能夠將枯燥的數字轉換成容易被人們接受的圖表,從而讓人留下更加深入的印象。而大多數編程語言都有本身的繪圖工具,matplotlib就是基於Python的繪圖工具包,使用它咱們能夠僅僅使用幾行代碼就生成 餅圖、直方圖、功率譜、條形圖、錯誤圖、散點圖、氣泡圖,甚至生成動態圖型也都很輕鬆。並且它的繪圖方法豐富,能夠在各類交互式環境中運行,且生成的圖像質量高、兼容各類硬拷貝格式。html
博主也是在測試一個算法的時候,爲了更直觀的呈現數據走向,學習了它的相關用法,這篇博客大部份內容是在此過程當中的學習筆記。python
matplotlib的官網地址是https://matplotlib.org/gallery
,下面這些是他們官網的一些示例圖形。算法
Matplotlib的安裝比較容易,能夠直接經過pip安裝,也能夠經過下載安裝包的方式安裝。博主使用的是python3,相關的安裝命令以下:編程
pip3 install matplotlib
若是你的Python3能夠直接點擊下面的py3連接下載進行安裝,則點擊能夠點擊其餘python版本
下載對應Python版本進行安裝
matplotlib-1.4.3.win-amd64-py3windows
其餘python版本api
用python畫柱狀圖很容易,主要的方法是:數組
atplotlib.pyplot.bar(left, height, width=0.8, bottom=None, hold=None, data=None, **kwargs)
- left: 每個柱形左側的X座標
- height:每個柱形的高度
- width: 柱形之間的寬度
- bottom: 柱形的Y座標
- color: 柱形的顏色
import matplotlib.pyplot as plt import time source_data = {'mock_verify': 369, 'mock_notify': 192, 'mock_sale': 517} # 設置原始數據 for a, b in source_data.items(): plt.text(a, b + 0.05, '%.0f' % b, ha='center', va='bottom', fontsize=11) # ha 文字指定在柱體中間, va指定文字位置 fontsize指定文字體大小 # 設置X軸Y軸數據,二者均可以是list或者tuple x_axis = tuple(source_data.keys()) y_axis = tuple(source_data.values()) plt.bar(x_axis, y_axis, color='rgb') # 若是不指定color,全部的柱體都會是一個顏色 plt.xlabel(u"渠道名") # 指定x軸描述信息 plt.ylabel(u"訪問量") # 指定y軸描述信息 plt.title("渠道訪問量統計表") # 指定圖表描述信息 plt.ylim(0, 600) # 指定Y軸的高度 plt.savefig('{}.png'.format(time.strftime('%Y%m%d%H%M%S'))) # 保存爲圖片 plt.show()
從上面的圖片看到,matplotlib繪製圖像顯示中文時,中文會變成小方格子。搜了不少資料,最佳的解決方法是動態設置參數,添加下面的代碼。dom
from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默認字體 mpl.rcParams['axes.unicode_minus'] = False # 解決保存圖像是負號'-'顯示爲方塊的問題
用python畫柱狀圖的主要方法以下:編程語言
plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.1f %%',shadow=False, labeldistance=1.1, startangle=0, pctdistance=0.8)
相關的參數已在註釋中說明工具
import matplotlib.pyplot as plt data = {'8516464': 106, '8085460': 704, '7593813': 491, '8709362': 24, '8707829': 6, '8684658': 23, '8679301': 11, '8665923': 29, '8660909': 23, '8652968': 31, '8631727': 31, '8622935': 24, '8620593': 18, '8521737': 33, '8605441': 49, '8495205': 82, '8477276': 57,'8474489': 71, '8456502': 50, '8446529': 68, '8433830': 136, '8254158': 103, '8176029': 88, '8081724': 58, '7922592': 185, '7850099': 62,'7617723': 61, '7615562': 90, '7615052': 57, '7604151': 102, '7511294': 59,'6951654': 27, '6946388': 142, '6945373': 159, '6937716': 347, '7460176': 64, '7246377': 87, '7240621': 145, '7204707': 645, '7028401': 671} source_data = sorted(data.items(), key=lambda x: x[1], reverse=True) print(source_data) labels = [source_data[i][0][:4] for i in range(len(source_data))] # 設置標籤 fracs = [source_data[i][1] for i in range(len(source_data))] explode = [x * 0.01 for x in range(len(source_data))] # 與labels一一對應,數值越大離中心區越遠 plt.axes(aspect=1) # 設置X軸 Y軸比例 # labeldistance標籤離中心距離 pctdistance百分百數據離中心區距離 autopct 百分比的格式 shadow陰影 plt.pie(x=fracs, labels=labels, explode=explode, autopct='%3.1f %%', shadow=False, labeldistance=1.1, startangle=0, pctdistance=0.8, center=(-1, 0)) # 控制位置:bbox_to_anchor數組中,前者控制左右移動,後者控制上下。ncol控制 圖例所列的列數。默認值爲1。fancybox 圓邊 plt.legend(loc=7, bbox_to_anchor=(1.2, 0.80), ncol=3, fancybox=True, shadow=True, fontsize=8) plt.show()
用python畫動態圖的主要方法以下:
ani = FuncAnimation(fig, update, frames=np.linspace(0, 2*np.pi, 128), init_func=init, blit=True)
能夠訪問下面的連接查看它官網的使用介紹
import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time # Fixing random state for reproducibility np.random.seed(196) # 初始數據繪圖 dis = np.zeros(40) dis2 = dis fig, ax = plt.subplots() line, = ax.plot(dis) ax.set_ylim(-1, 1) plt.grid(True) ax.set_ylabel("distance: m") ax.set_xlabel("time") def update(frame): global dis global dis2 global line # 讀入模擬 a = np.random.rand() * 2 - 1 time.sleep(np.random.rand() / 10) # 繪圖數據生成 dis[0:-1] = dis2[1:] dis[-1] = a dis2 = dis # 繪圖 line.set_ydata(dis) # 顏色設置 plt.setp(line, 'color', 'c', 'linewidth', 2.0) ani = animation.FuncAnimation(fig, update, frames=None, interval=100) plt.show()
效果圖:
matplotlib中對顯示的字體和顏色均可以進行定製:
內建顏色 | 藍色 | 綠色 | 紅色 | 青色 | 品紅 | 黃色 | 黑色 |
---|---|---|---|---|---|---|---|
對應字符 | 'b' | 'g' | 'r' | 'c' | 'm' | 'y' | 'k' |
其餘的顏色使用能夠參考下面這篇博客
字體 | 對應字體 |
---|---|
黑體 | SimHei |
微軟雅黑 | Microsoft YaHei |
微軟正黑體 | Microsoft JhengHei |
新宋體 | NSimSun |
新細明體 | PMingLiU |
細明體 | MingLiU |
標楷體 | DFKai-SB |
仿宋 | FangSong |
楷體 | KaiTi |
仿宋_GB2312 | FangSong_GB2312 |
楷體_GB2312 | KaiTi_GB2312 |
參考資料: