Matplotlib - Python的2D&3D繪圖庫

jopen 12年前發布 | 71K 次閱讀 Python Python開發

Matplotlib - Python的2D&3D繪圖庫

Matplotlib是Python的2D&3D繪圖庫,產生各種已經拷貝格式和交互幻劍中跨平臺形式的印刷質量圖標。Matplot語法與Matlab相似,繪圖繪圖功能強大,而且十分容易上手。

“個人永遠不能超過集體的力量”(Ken Blanchard)。Python強大的原因之一就在于其開源,有很多優秀的程序員為其提供了豐富的類庫。Matplotlib就是其中之一,但他的創始人John D. Hunter英年早逝,在今年8月份死于治療癌癥引起的并發癥。向這位優秀的程序員致敬!

Matplotlib - Python的2D&3D繪圖庫

 

安裝matplot之前先要安裝NumpyMatplotlib - Python的2D&3D繪圖庫

Numpy也是python的一個擴展包,提供基礎的科學計算,包括:

  • 強大的N維矩陣對象
  • C/C++ 和 Fortran 代碼集成工具
  • 有用的線性代數、傅立葉轉換和隨機數生成函數
  • </ul>

    Numpy的下載地址: http://scipy.org/Download
    也可以從我的csdn資源下載(附有說明文檔):
    安裝都很簡單,一路雙擊就可以~

    以下是一個簡單的繪制正弦三角函數y=sin(x)的例子。
    # plot a sine wave from 0 to 4pi
    from pylab import *
    x_values = arange(0.0, math.pi * 4, 0.01)
    y_values = sin(x_values)
    plot(x_values, y_values, linewidth=1.0)
    xlabel('x')
    ylabel('sin(x)')
    title('Simple plot')
    grid(True)
    savefig("sin.png")
    show()
    效果如圖:
    Matplotlib - Python的2D&3D繪圖庫

    pylab的plot函數與matlab很相似,也可以在后面增加屬性值,可以用
    help(pylab.plot)
    查看說明:
    Matplotlib - Python的2D&3D繪圖庫

    例如用‘r*’,即紅色,星形來畫圖:
    import os
    import math
    import pylab
    y_values = []
    x_values = []
    num = 0.0
    #collect both num and the sine of num in a list
    while num < math.pi * 4:
        y_values.append(math.sin(num))
        x_values.append(num)
        num += 0.1
    
    pylab.plot(x_values,y_values,'r*')
    pylab.show()

    Matplotlib - Python的2D&3D繪圖庫
    Matplot中可以使用Latex來編輯公式。比如最上面那個Matplotlib的logo,背景的公式就是使用的Latex:
    """
    Thanks to Tony Yu  for the logo design
    """
    
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import matplotlib.cm as cm
    
    mpl.rcParams['xtick.labelsize'] = 10
    mpl.rcParams['ytick.labelsize'] = 12
    mpl.rcParams['axes.edgecolor'] = 'gray'
    
    
    axalpha = 0.05
    #figcolor = '#EFEFEF'
    figcolor = 'white'
    dpi = 80
    fig = plt.figure(figsize=(6, 1.1),dpi=dpi)
    fig.figurePatch.set_edgecolor(figcolor)
    fig.figurePatch.set_facecolor(figcolor)
    
    
    def add_math_background():
        ax = fig.add_axes([0., 0., 1., 1.])
    
        text = []
        text.append((r"$W^{3\beta}_{\delta_1 \rho_1 \sigma_2} = U^{3\beta}_{\delta_1 \rho_1} + \frac{1}{8 \pi 2} \int^{\alpha_2}_{\alpha_2} d \alpha^\prime_2 \left[\frac{ U^{2\beta}_{\delta_1 \rho_1} - \alpha^\prime_2U^{1\beta}_{\rho_1 \sigma_2} }{U^{0\beta}_{\rho_1 \sigma_2}}\right]$", (0.7, 0.2), 20))
        text.append((r"$\frac{d\rho}{d t} + \rho \vec{v}\cdot\nabla\vec{v} = -\nabla p + \mu\nabla^2 \vec{v} + \rho \vec{g}$",
                    (0.35, 0.9), 20))
        text.append((r"$\int_{-\infty}^\infty e^{-x^2}dx=\sqrt{\pi}$",
                    (0.15, 0.3), 25))
        #text.append((r"$E = mc^2 = \sqrt{{m_0}^2c^4 + p^2c^2}$",
        #            (0.7, 0.42), 30))
        text.append((r"$F_G = G\frac{m_1m_2}{r^2}$",
                    (0.85, 0.7), 30))
        for eq, (x, y), size in text:
            ax.text(x, y, eq, ha='center', va='center', color="#11557c", alpha=0.25,
                    transform=ax.transAxes, fontsize=size)
        ax.set_axis_off()
        return ax
    
    def add_matplotlib_text(ax):
        ax.text(0.95, 0.5, 'matplotlib', color='#11557c', fontsize=65,
                   ha='right', va='center', alpha=1.0, transform=ax.transAxes)
    
    def add_polar_bar():
        ax = fig.add_axes([0.025, 0.075, 0.2, 0.85], polar=True)
    
    
        ax.axesPatch.set_alpha(axalpha)
        ax.set_axisbelow(True)
        N = 7
        arc = 2. * np.pi
        theta = np.arange(0.0, arc, arc/N)
        radii = 10 * np.array([0.2, 0.6, 0.8, 0.7, 0.4, 0.5, 0.8])
        width = np.pi / 4 * np.array([0.4, 0.4, 0.6, 0.8, 0.2, 0.5, 0.3])
        bars = ax.bar(theta, radii, width=width, bottom=0.0)
        for r, bar in zip(radii, bars):
            bar.set_facecolor(cm.jet(r/10.))
            bar.set_alpha(0.6)
    
        for label in ax.get_xticklabels() + ax.get_yticklabels():
            label.set_visible(False)
    
        for line in ax.get_ygridlines() + ax.get_xgridlines():
            line.set_lw(0.8)
            line.set_alpha(0.9)
            line.set_ls('-')
            line.set_color('0.5')
    
        ax.set_yticks(np.arange(1, 9, 2))
        ax.set_rmax(9)
    
    if __name__ == '__main__':
        main_axes = add_math_background()
        add_polar_bar()
        add_matplotlib_text(main_axes)
        plt.show()
    來自:http://blog.csdn.net/xiaowei_cqu/article/details/8272367
 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!