1. 程式人生 > >python利用matplotlib畫圖

python利用matplotlib畫圖

matplotlib簡介 

       matplotlib 是python最著名的繪相簿,它提供了一整套和matlab相似的命令API,十分適合互動式地進行製圖。而且也可以方便地將它作為繪圖控制元件,嵌入GUI應用程式中。它的文件相當完備,並且Gallery(https://matplotlib.org/gallery.html)頁面 中有上百幅縮圖,開啟之後都有源程式。因此如果你需要繪製某種型別的圖,只需要在這個頁面中瀏覽/複製/貼上一下,基本上都能搞定。

例子如下:畫出nba火箭隊和勇士隊近10年的戰績直線圖和柱狀圖,程式碼如下

'''import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

np.random.seed(2000)
y = np.random.standard_normal((10, 2))
plt.figure(figsize=(7,5))
plt.plot(y, lw = 1.5)
plt.plot(y, 'ro')
plt.grid(True)
plt.axis('tight')
plt.xlabel('index')
plt.ylabel('value')
plt.title('A simple plot')
plt.show()
'''
import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator  # 匯入自動查詢到最佳的最大刻度函式
import numpy as np

x = [2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018]
y1 = [53, 42, 43, 34, 45, 54, 56, 41, 55, 65]   # 火箭09-18勝場
y3 = [29, 40, 39, 32, 37, 28, 26, 41, 27, 17]   # 負場
y2 = [29, 26, 36, 23, 47, 51, 67, 73, 67, 58]   #勇士09-18勝場
y4 = [53, 56, 46, 43, 35, 31, 15, 9, 15, 24]    # 負場

def DrawLine():
    #plt.figure() #建立影象物件

    # 1、直線圖
    # Get Current Axes 獲取當前軸物件
    ax = plt.figure().gca()
    # 設定x軸,y軸最大刻度為整數
    ax.xaxis.set_major_locator(MaxNLocator(integer=True))
    ax.yaxis.set_major_locator(MaxNLocator(integer=True))
    # 繪圖
    plt.subplot(211)   # 兩行一列 第一幅直線圖
    p1, = plt.plot(x, y1, 'ro-', label='rocket')   # r表示red,o表示使用圓形標記繪製,-表示實現線,
	# 圖形上的點畫註解
    for xy in zip(x, y1):
        plt.annotate("(%s)" % xy[1], xy=xy, xytext=(-20, 10), textcoords='offset points') #(%s,%s)" % xy,註解中顯示格式(x,y)
    p2, = plt.plot(x, y2, 'bo--', label='warrior') # b表示藍色,--表示虛線
    for xy in zip(x, y2):
        plt.annotate("(%s)" % xy[1], xy=xy, xytext=(-20, 10), textcoords='offset points')
    # 新增圖例
    plt.legend(loc='upper right')   # 也可plt.legend([p1, p2], ['rocket', 'warrior'], loc='upper left')
    # 新增x,y軸標籤名
    plt.xlabel('year')
    plt.ylabel('win')
    # 新增圖示題
    plt.title('history grade')
    plt.grid(True)  # 新增網格
	
    # 2、柱狀圖
    n_groups = 10
    index = np.arange(n_groups)
    bar_width = 0.35
    opacity = 0.4
    plt.subplot(212)   # 兩行一列 第二幅柱狀圖
    p1 = plt.bar(index, y1, bar_width, alpha=opacity, color='r', label='rocket')
    p2 = plt.bar(index + bar_width, y2, bar_width, alpha=opacity, color='b', label='warrior')
    plt.legend()
    plt.xticks(index + bar_width/2, tuple(x))   # x軸顯示年限
    plt.xlabel('year')
    plt.ylabel('win')
    plt.title('history grade')
    plt.tight_layout()  # 會自動調整子圖引數,使之填充整個影象區域
    plt.show()

圖形為:

參考連結:

https://blog.csdn.net/pipisorry/article/details/37742423

https://www.cnblogs.com/Ms-Green/p/6203850.html

Gallery

https://matplotlib.org/gallery.html

調整座標整數刻度

https://codeday.me/bug/20180824/225470.html

matplotlib繪圖視覺化知識

https://blog.csdn.net/panda1234lee/article/details/52311593

https://www.cnblogs.com/chaoren399/p/5792168.html

圖例分開顯示

http://blog.sina.com.cn/s/blog_a7ace3d80102wbgl.html

柱狀圖

https://blog.csdn.net/code_segment/article/details/79209947