强基初中数学&学Python——第247课 数字和数学第三方模块Matplotlib之三:Pyplot教程(4)

使用文本

  text函数可用于在任意位置添加文本,xlabel、ylabel和title可用于在指定位置添加文本(有关更详细的示例,请参阅Text in Matplotlib Plots)。
text:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.text.html#matplotlib.pyplot.textxlabel:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.xlabel.html#matplotlib.pyplot.xlabelylabel:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.ylabel.html#matplotlib.pyplot.ylabeltitle:https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.title.html#matplotlib.pyplot.titleText in Matplotlib Plots:

https://matplotlib.org/stable/tutorials/text/text_intro.html

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

import matplotlib.pyplot as pltimport numpy as npnp.random.seed(19680801)  # seed the random number generator.
mu, sigma = 100, 15x = mu + sigma * np.random.randn(10000)
# the histogram of the datan, bins, patches = plt.hist(x, 50, density=True, 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()

 

  所有文本函数都返回matplotlib.text.Text实例。与图线一样,可以通过向文本函数传递关键字参数或使用setp:matplotlib.text.Text:https://matplotlib.org/stable/api/text_api.html#matplotlib.text.Textsetp:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.setp.html#matplotlib.pyplot.setp

· 

t = plt.xlabel('my data', fontsize=14, color='red')

  文本属性和布局(Text properties and layout)中详细介绍了这些属性。Text properties and layout:

https://matplotlib.org/stable/tutorials/text/text_props.html

在文本中使用数学表达式

  matplotlib任何文本表达式中接受TeX方程表达式。例如,在标题中编写表达式σi=15,可以写一个由美元符号包围的TeX表达式:

· 

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

  标题字符串前面的r很重要——它表示该字符串是一个原始字符串,而不是将反斜杠视为python转义。matplotlib具有内置的TeX表达式解析器和布局引擎,并提供自己的数学字体——有关详细信息,请参阅编写数学表达式(Writing mathematical expressions)。因此,可以跨平台使用数学文本,而无需安装TeX。对于安装了LaTeX和dvipng的用户,还可以使用LaTeX格式化文本,并将输出直接合并到显示图形或保存的脚本中——请参阅用LaTeX进行文本渲染(Text rendering with LaTeX)。Writing mathematical expressions:https://matplotlib.org/stable/tutorials/text/mathtext.htmlText rendering with LaTeX:

https://matplotlib.org/stable/tutorials/text/usetex.html

注释文本

  使用上面的基本文本(text)功能可以将文本放置在Axes上的任意位置。文本的一个常见用途是注释图表的某些特征,注释(annotate)方法是个助手,使注释变得容易。在注释中,需要考虑两点:由参数xy表示的注释位置和xytext表示的文本位置。这两个参数都是(x,y)坐标元组。annotate:

https://matplotlib.org/stable/api/_as_gen/matplotlib.pyplot.annotate.html#matplotlib.pyplot.annotate

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

import matplotlib.pyplot as pltax = plt.subplot()
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.show()

 

  在这个基本示例中,xy(箭头尖)和xytext位置(文本位置)都在数据坐标中。事实上,有多种其他坐标系可供选择——有关详细信息,请参见基本注释(Basic annotation)和高级注释(Advanced Annotations)。更多示例可在注释绘图(Annotating Plots)中找到。Basic annotation:https://matplotlib.org/stable/tutorials/text/annotations.html#annotations-tutorialAdvanced Annotations:https://matplotlib.org/stable/tutorials/text/annotations.html#plotting-guide-annotationAnnotating Plots:

https://matplotlib.org/stable/gallery/text_labels_and_annotations/annotation_demo.html

对数轴和其他非线性轴

  matplotlib.pyplot不仅支持线性轴刻度,还支持对数和logit刻度。如果数据跨越多个数量级,则通常使用此方法。更改轴的比例很简单:
matplotlib.pyplot:

https://matplotlib.org/stable/api/pyplot_summary.html#module-matplotlib.pyplot

· 

plt.xscale('log')

  下面显示了具有相同数据和y轴不同刻度的四幅图的示例。

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

· 

import matplotlib.pyplot as pltimport numpy as np# Fixing random state for reproducibilitynp.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 scalesplt.figure()
# linearplt.subplot(221)plt.plot(x, y)plt.yscale('linear')plt.title('linear')plt.grid(True)
# logplt.subplot(222)plt.plot(x, y)plt.yscale('log')plt.title('log')plt.grid(True)
# symmetric logplt.subplot(223)plt.plot(x, y - y.mean())plt.yscale('symlog', linthresh=0.01)plt.title('symlog')plt.grid(True)
# logitplt.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()

 

  也可以添加自己的刻度,有关详细信息,请参见matplotlib.scale:

https://matplotlib.org/stable/api/scale_api.html#module-matplotlib.scale