【matplotlib教程】繪圖樣式,文本線型、軸刻度

一、簡介

對於每對x,y參數,都有一個可選的第三個參數,它是表示圖的顏色和線條類型的格式字符串。格式字符串的字母和符號來自MATLAB,您將顏色字符串與線條樣式字符串連接在一起。默認格式字符串是“ b-”,這是一條藍色實線。例如,要用紅色圓圈繪製以上內容,我們可以:

plt.plot([1, 2, 3, 4], [1, 4, 9, 16], 'ro')
plt.axis([0, 6, 0, 20])
plt.show()

在這裏插入圖片描述

axis()上面示例中的 命令採用一個列表並指定軸的視口:[xmin, xmax, ymin, ymax]

二、控制線特性

線條具有許多可以設置的屬性:線寬,破折號樣式,抗鋸齒等;見matplotlib.lines.Line2D。有幾種設置線屬性的方法:

1、使用關鍵字args:

plt.plot(x, y, linewidth=2.0)

2、使用Line2D實例的setter方法。

plot返回Line2D對象列表;例如line1, line2 = plot(x1, y1, x2, y2)。在下面的代碼中,我們假設只有一行,所以返回的列表的長度爲1。我們使用line, 來獲取該列表的第一個元素:

line, = plt.plot(x, y, '-')
line.set_antialiased(False) # turn off antialiasing

3、使用setp()命令。

下面的示例使用MATLAB樣式的命令在行列表上設置多個屬性。setp與對象列表或單個對象透明地工作。您可以使用python關鍵字參數或MATLAB樣式的字符串/值對:

lines = plt.plot(x1, y1, x2, y2)
# use keyword args
plt.setp(lines, color='r', linewidth=2.0)
# or MATLAB style string value pairs
plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

三、畫多個圖形和軸

MATLAB和和pyplot具有當前圖形和當前軸的概念。所有繪圖命令均適用於當前軸。該函數gca()返回當前軸(一個matplotlib.axes.Axes實例),並 gcf()返回當前圖形(一個matplotlib.figure.Figure實例)。通常,您不必爲此擔心,因爲所有這些操作都是在後臺進行的。下面是創建兩個子圖的腳本。您可以通過使用多個figure()具有遞增數字的呼叫來創建多個數字 。當然,每個圖形都可以包含您內心所希望的多個軸和子圖:

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

plt.figure()
plt.subplot(211)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')
plt.show()

在這裏插入圖片描述

四、使用文本

該text()命令可用於在任意位置添加文本xlabel(),, ylabel()和title() 可用於在指示的位置添加文本( 有關更多詳細示例,請參見Matplotlib圖中的Text)。

import matplotlib.pyplot as plt
import numpy as np

mu, sigma = 100, 15
x = mu + sigma * np.random.randn(10000)

# the histogram of the data
n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)


plt.xlabel('Smarts')
plt.ylabel('Probability')
plt.title('Histogram of IQ')
plt.text(60, .025, r'$\mu=100,\ \sigma=15$')
plt.axis([40, 160, 0, 0.03])
plt.grid(True)
plt.show()

plt.show()

在這裏插入圖片描述
在文本中使用數學表達式

matplotlib在任何文本表達式中接受TeX方程表達式。例如寫表達式σi=15\sigma_i=15 在標題中,您可以編寫一個帶有美元符號的TeX表達式:

plt.title(r'$\sigma_i=15$')

註釋文字

text()上面基本命令的使用將文本放置在軸上的任意位置。文本的常見用法是註釋繪圖的某些功能,並且該 annotate()方法提供了幫助程序功能以簡化註釋。在註釋中,有兩點需要考慮:由參數表示的要註釋xy的位置和text的位置xytext。這兩個參數都是元組。(x, y)

import matplotlib.pyplot as plt
import numpy as np

ax = plt.subplot(111)

t = np.arange(0.0, 5.0, 0.01)
s = np.cos(2*np.pi*t)
line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),
             arrowprops=dict(facecolor='black', shrink=0.05),
             )

plt.ylim(-2, 2)
plt.grid()

plt.show()

在這裏插入圖片描述

五、對數軸和其他非線性軸

matplotlib.pyplot不僅支持線性軸刻度,還支持對數和對數刻度。如果數據跨多個數量級,則通常使用此方法。更改軸的比例很容易:

plt.xscale('log'

下面顯示了四個圖的示例,這些圖的y軸數據相同且比例不同。

from matplotlib.ticker import NullFormatter  # useful for `logit` scale

# Fixing random state for reproducibility
np.random.seed(19680801)

# make up some data in the open interval (0, 1)
y = np.random.normal(loc=0.5, scale=0.4, size=1000)
y = y[(y > 0) & (y < 1)]
y.sort()
x = np.arange(len(y))

# plot with various axes scales
plt.figure()

# linear
plt.subplot(221)
plt.plot(x, y)
plt.yscale('linear')
plt.title('linear')
plt.grid(True)


# log
plt.subplot(222)
plt.plot(x, y)
plt.yscale('log')
plt.title('log')
plt.grid(True)


# symmetric log
plt.subplot(223)
plt.plot(x, y - y.mean())
plt.yscale('symlog', linthreshy=0.01)
plt.title('symlog')
plt.grid(True)

# logit
plt.subplot(224)
plt.plot(x, y)
plt.yscale('logit')
plt.title('logit')
plt.grid(True)
# Adjust the subplot layout, because the logit one may take more space
# than usual, due to y-tick labels like "1 - 10^{-3}"
plt.subplots_adjust(top=0.92, bottom=0.08, left=0.10, right=0.95, hspace=0.25,
                    wspace=0.35)

plt.show()

在這裏插入圖片描述


如果覺得ok,點個贊,點個關注,也歡迎給個打賞支持一下編者的工作
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章