python学习日记25matplotlib

matplotlib,是一款风格近似matlab,面向对象的画图工具包

一:
入门教程
https://matplotlib.org/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py

顶层top of the hierarchy,是由 matplotlib.pyplot模块提供的state-machine environment
下一层是面向对象接口
import matplotlib.pyplot as plt
import numpy as np

画图时各部分名称
python学习日记25matplotlib_第1张图片

Figure,整个图像
Axes,每幅子图的坐标系范围内,一个plot,
一个子图包含两个轴Axis,该轴可以设置最大值最小值范围,
用Axes的方法set_xlim() and set_ylim()
图名设置:set_title()
坐标轴名设置:set_xlabel() set_ylabel())
Axis,坐标轴
Artist,每个figure是一个artist,可以画在Canvas帆布上
Input:np.array

二:
Matplotlib, pyplot and pylab的关系
Matplotlib是整个包; matplotlib.pyplot 是其中的模块; pylab 是装matplotlib时同时装上的另外的模块
pylab是将pyplot和numpy结合在一起,不建议使用,引起命名空间污染。

三:plt.plot
第一次调用 plt.plot会自动创建 figure and axes。后续调用plt.plot会复用前面的设置。

四:plt.subplot
https://matplotlib.org/api/_as_gen/matplotlib.pyplot.subplots.html?highlight=subplots#matplotlib.pyplot.subplots

subplots:

matplotlib.pyplot.subplots(
nrows=1, ncols=1,
sharex=False, sharey=False,
squeeze=True,
subplot_kw=None,
gridspec_kw=None,
**fig_kw)[source]

Create a figure and a set of subplots.
reurns: fig:figure
ax:axes.Axes

五:
如果不断重复同一画法画不同的图,推荐如下使用函数

def my_plotter(ax, data1, data2, param_dict):

然后调用

fig, (ax1, ax2) = plt.subplots(1, 2)
my_plotter(ax1, data1, data2, {‘marker’: ‘x’})
my_plotter(ax2, data3, data4, {‘marker’: ‘o’})
python学习日记25matplotlib_第2张图片

六:
Backends
What is a backend?
matplotlib有多种应用场景,跳出新窗口画图,在command line画图,在GUI中画图,在webapplication中画图。
frontend是前端显示,backend是后端的隐含工作。
两种 backends: 1,user interface backends (for use in pygtk, wxpython, tkinter, qt4etc; 也指交互后端"interactive backends")
2,hardcopy backends to make image files (PNG, SVG, PDF, PS; 也指无交互后端 “non-interactive backends”).
Since the default value for the bindings to be used is PyQt4, matplotlib first tries to import it, if the import fails, it tries to import PySide.

七:
What is interactive mode?
The default Boolean value is set by the matplotlibrc file,
customized: Customizing Matplotlib with style sheets and rcParams https://matplotlib.org/tutorials/introductory/customizing.html
set via matplotlib.interactive()
https://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.interactive
value may be queried via matplotlib.is_interactive().
https://matplotlib.org/api/matplotlib_configuration_api.html#matplotlib.is_interactive
不要在画图中间turn on或者off,很少需要,且会引起困惑
Interactive mode may also be turned on via matplotlib.pyplot.ion(), and turned off via matplotlib.pyplot.ioff().

八:
画图风格列表,使用:
print(plt.style.available)
plt.style.use(‘ggplot’)

九:matplot设置文件目录:(不深究)

缓存目录

mpl.get_cachedir()

设置目录

import matplotlib as mpl
print(mpl.get_configdir())

返回

‘C:\Users\sun\.matplotlib’

执行

plt.style.use(‘presentation’)
报错
OSError: ‘presentation’ not found in the style library and input is not a valid URL or path; see style.available for list of available styles

打开core.py文件,并运行,看到library中,没有自行添加的presentation style
python学习日记25matplotlib_第3张图片
在’C:\Users\sun\.matplotlib’目录下创建presentation.mplstyle文件,再运行core.py
python学习日记25matplotlib_第4张图片
增加了presentation style,
再运行plt.style.use(‘presentation’),则成功

资源设置目录
https://matplotlib.org/tutorials/introductory/customizing.html#customizing-with-matplotlibrc-files

print(mpl.matplotlib_fname())
C:\Users\sun\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\matplotlib\mpl-data\matplotlibrc

同时,看到style的实际读取目录是C:\Users\sun\AppData\Local\conda\conda\envs\tensorflow\Lib\site-packages\matplotlib\mpl-data\stylelib
前文所述presentation.mplstyle文件,直接存在这里即可生效

使用rc文件

mpl.rcParams[‘lines.linewidth’] = 7
mpl.rcParams[‘lines.color’] = ‘r’
plt.plot([1.6, 2.7])

查看matplotlibrc文件

LINES
See http://matplotlib.org/api/artist_api.html#module-matplotlib.lines for more
information on line properties.
#lines.linewidth : 1.5 ## line width in points
#lines.linestyle : - ## solid line
#lines.color : C0 ## has no affect on plot(); see axes.prop_cycle

经过测试,设置linewidth生效,但lines.color无效,查看axes.prop_cycle官网说明,是因为设置了一个循环机,多条线按照循环机的风格显示
ax.set_prop_cycle(color=[‘red’, ‘green’, ‘blue’],marker=[‘o’, ‘+’, ‘x’])
https://matplotlib.org/tutorials/intermediate/color_cycle.html?highlight=axes prop_cycle

from cycler import cycler
mpl.rcParams[‘lines.linewidth’] = 7
mpl.rcParams[‘lines.color’] = ‘r’
prop_cycle = plt.rcParams[‘axes.prop_cycle’]
colors = prop_cycle.by_key()[‘color’]
print(colors)
#colors=[‘red’]
colors = [’#1f77b4’, ‘#ff7f0e’, ‘#2ca02c’, ‘#d62728’, ‘#9467bd’, ‘#8c564b’, ‘#e377c2’, ‘#7f7f7f’, ‘#bcbd22’, ‘#17becf’]
mpl.rcParams[‘axes.prop_cycle’] = cycler( color=colors)
#mpl.rcParams[‘axes.prop_cycle’] = cycler( color=[‘red’])
#axes.prop_cycle
ax = plt.gca()
ax.plot([3.1, 2.2])
plt.plot([1.6, 2.7])
ax.set_prop_cycle(color=‘red’,marker=[‘o’])
plt.plot([2.5,1])
plt.plot([0.5,1])
python学习日记25matplotlib_第5张图片

十:
在命令行里输入,会弹出新的窗口画图

matplotlib
Using matplotlib backend: TkAgg

如果想切换回图片在console里显示,就运行

matplotlib inline

In [27]:

十一:plt.show plt.draw plt.plot ax.plot之间的关系和差别
plt.draw通常是在后台更新,但不在屏幕显示上更新,程序结束后,会显示最终结果。(官网教程说在ion状态下,用来每次refresh。但实际操作中,发现该功能由pause完成,draw无效。可能与编程环境有关,只是在spyder中这样)
plt.show会显示图像
plt.plot如果要在matplotlib弹出窗口,ion状态下显示,必须搭配plt.pause(秒数)

import matplotlib.pyplot as plt
plt.ioff()
plt.plot([1.6, 2.7])

什么都不显示,直到plt.show
ioff状态则在plt.show之前什么都不显示

ax.plot仅画ax区域内的内容,搭配ax = plt.gca()或ax=plt.subplot(5,5,1+i)

十二:Line segment simplification
Simplify Line的解释
Simplifies lines by removing relatively extraneous vertices while preserving essential shape.移除相对外部顶点保留主要形状。
http://pro.arcgis.com/en/pro-app/tool-reference/cartography/simplify-line.htm
python学习日记25matplotlib_第6张图片

smooth和simplify的差别
python学习日记25matplotlib_第7张图片

python学习日记25matplotlib_第8张图片

你可能感兴趣的:(python,python,matplot)