不用面向对象方式画图,优点在于代码简单,缺点在于画多图和多子图附带各种标注时,代码很乱。
当然,更复杂和标注清晰的图,大部分需求场景是成熟的可视化展示,这种情况下用echart更好。

各个对象

plt.figure()

先生成一个figure,在figure上生成一个Axes,在Axes上面生成line(plot),或者生成patch(bar&hist)

它们之间的关系参照这段代码:

f.axes[0].lines[0]

获取的方法1

f=plt.gcf()#get current figure
a=plt.gca()#get current axes

获取的方法2

f=plt.gcf()
a=plt.getp(f,'axes')[0]
l=plt.getp(f,'lines')[0]

共有属性

这些对象共有的一些属性:

关键字

解释

alpha

透明度,0~1

animated

布尔值,用于绘制动画效果

axes

所在的axes

clip_box

对象的裁剪框

clip_on

是否裁剪

clip_path

裁剪的路径

contains

判断指定点是否在对象上的函数

figure

对象所在的figure

label

文本标签

picker

用来控制对象的选取

transform

控制偏移、旋转、缩放等

visible

是否可见

zorder

控制绘图顺序,any number

figure

f=plt.gcf()
f=plt.figure(1)

figure的类型是:

<class 'matplotlib.figure.Figure'>

figure下的属性(用plt.getp(f)获取)

agg_filter = None
alpha = None
animated = False
axes = [<matplotlib.axes._subplots.AxesSubplot>]
children = [<matplotlib.patches.Rectangle>]
clip_box = None
clip_on = True
clip_path = None
contains = None
default_bbox_extra_artists = [<matplotlib.axes._subplots.AxesSubplot>]
dpi = 72.0
edgecolor = (1.0, 1.0, 1.0, 0.0)
facecolor = (1.0, 1.0, 1.0, 0.0)
figheight = 4.0
figure = None
figwidth = 6.0
frameon = True
gid = None
label =
path_effects = []
picker = None
rasterized = None
size_inches = [ 6.  4.]
sketch_params = None
snap = None
tight_layout = False
transform = IdentityTransform()
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
window_extent = TransformedBbox(Bbox([[0.0, 0.0], [6.0, 4.0]]))
zorder = 0

一些解释:

属性

意义

axes

Axes对象列表

patch

作为背景的Rectangle对象

images

FigureImage对象列表,用于显示图像

lines

Line2D对象列表

patches

Patch对象列表

text

Text对象列表,用于显示文字

Axes

对象信息:

<matplotlib.axes._subplots.AxesSubplot at 0x263c9ba9320>

可以有两种方法获取

a1=plt.getp(f,'axes')#生成的是一个list
a2=plt.gca()#当前激活的axes

axes对象的属性:(用plt.getp(a2)获取)

adjustable = box
agg_filter = None
alpha = None
anchor = C
animated = False
aspect = auto
autoscale_on = False
autoscalex_on = True
autoscaley_on = False
axes = Axes(0.125,0.125;0.775x0.755)
axes_locator = None
axis_bgcolor = (1.0, 1.0, 1.0, 1)
axisbelow = line
children = [<matplotlib.lines.Line2D>]
clip_box = None
clip_on = True
clip_path = None
contains = None
cursor_props = (1, (0.0, 0.0, 0.0, 1))
data_ratio = 0.36363636363636365
default_bbox_extra_artists = [<matplotlib.lines.Line2D>]
facecolor = (1.0, 1.0, 1.0, 1)
fc = (1.0, 1.0, 1.0, 1)
figure = Figure(432x288)
frame_on = True
geometry = (1, 1, 1)
gid = None
images = <a list of 0 AxesImage objects>
label =
legend = None
legend_handles_labels = ([], [])
lines = <a list of 34 Line2D objects>
navigate = True
navigate_mode = None
path_effects = []
picker = None
position = Bbox(x0=0.125, y0=0.125, x1=0.9, y1=0.88)
rasterization_zorder = None
rasterized = None
renderer_cache = None
shared_x_axes = <matplotlib.cbook.Grouper
shared_y_axes = <matplotlib.cbook.Grouper
sketch_params = None
snap = None
subplotspec = <matplotlib.gridspec.SubplotSpec
title = Pyplot
transform = IdentityTransform()
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
window_extent = Bbox(x0=50.5, y0=32.5, x1=392.3, y1=256.94)
xaxis = XAxis(54.000000,36.000000)
xaxis_transform = BlendedGenericTransform(CompositeGenericTransform(...))
xbound = (-0.30000000000000004, 6.2999999999999998)
xgridlines = <a list of 9 Line2D xgridline objects>
xlabel = Time(s)
xlim = (-0.30000000000000004, 6.2999999999999998)
xmajorticklabels = <a list of 9 Text xticklabel objects>
xminorticklabels = <a list of 0 Text xticklabel objects>
xscale = linear
xticklabels = <a list of 9 Text xticklabel objects>
xticklines = <a list of 18 Text xtickline objects>
xticks = [-1.  0.  1.  2.  3.  4.]...
yaxis = YAxis(54.000000,36.000000)
yaxis_transform = BlendedGenericTransform(BboxTransformTo(Transforme...))
ybound = (-1.2, 1.2)
ygridlines = <a list of 7 Line2D ygridline objects>
ylabel = Volt
ylim = (-1.2, 1.2)
ymajorticklabels = <a list of 7 Text yticklabel objects>
yminorticklabels = <a list of 0 Text yticklabel objects>
yscale = linear
yticklabels = <a list of 7 Text yticklabel objects>
yticklines = <a list of 14 Line2D ytickline objects>
yticks = [-1.5 -1.  -0.5  0.   0.5  1. ]...
zorder = 0

参数

意义

xlabel, ylabel

X, Y轴的标题文字

title

标题

xlim, ylim

X, Y轴的范围

legend

显示图示

Axes的方法

显示legend:ax1.legend()
自动调整横纵坐标:ax.autoscale_view()
不显示坐标轴:ax.set_axis_off()

axes对象可以包含的对象

Axes方法

所创建的对象

添加进的列表

annotate

Annotate

texts

bars

Rectangle

patches

errorbar

Line2D,Rectangle

lines,patches

fill

Polygon

patches

hist

Rectangle

patches

imshow

AxesImage

images

legend

Legend

legends

plot

Line2D

lines

scatter

PolygonCollection

Collections

text

Text

texts

line

对象信息:

<matplotlib.lines.Line2D at 0x263c9fc0a20>

获取方法类似

l=plt.getp(a,'lines')#是一个list
l=plt.plot(...)#这个可以注意一下
l=plt.plot(x,y,label="$sin(x)$",color='red',linewidth=2)#可以直接在plot中配置参数

获取line属性的方法

line=plt.plot(x,y)
plt.getp(line[0],'color')
plt.setp(line[0],'color','r')
plt.setp(line,'color','r')#setp可以对一组对象进行操作,getp只能操作一个

line有这些属性:

agg_filter = None
alpha = None
animated = False
antialiased or aa = True
axes = Axes(0.125,0.125;0.775x0.755)
children = []
clip_box = TransformedBbox(Bbox([[0.0, 0.0], [1.0, 1.0]]), Co...)
clip_on = True
clip_path = None
color or c = #1f77b4
contains = None
dash_capstyle = butt
dash_joinstyle = round
data = (array([ 0.        ,  0.66666667,  1.33333333,  2....]))
drawstyle = default
figure = Figure(432x288)
fillstyle = full
gid = None
label = $cos(x^2)$
linestyle or ls = -
linewidth or lw = 1.5
marker = +
markeredgecolor or mec = #1f77b4
markeredgewidth or mew = 1.0
markerfacecolor or mfc = #1f77b4
markerfacecoloralt or mfcalt = none
markersize or ms = 6.0
markevery = None
path = Path(array([[ 0., -0.],[ 0...]]))
path_effects = []
picker = None
pickradius = 5
rasterized = None
sketch_params = None
snap = None
solid_capstyle = projecting
solid_joinstyle = round
transform = CompositeGenericTransform(TransformWrapper(Blended...))
transformed_clip_path_and_affine = (None, None)
url = None
visible = True
xdata = [ 0.          0.66666667  1.33333333  2.          ]
xydata = [[ 0.         -0.        ]  [ 0.66666667 -0.618369.]]
ydata = [-0.         -0.6183698  -0.9719379  -0.90929743 -...]
zorder = 2

属性

解释

label

给plot的曲线一个标签名字,可以使用LaTeX

color

给曲线指定颜色,可以是英文单词’red’等,也可以是16进制数’##ff0000’,也可以用0~1tuple(1.0,0,0)

linewidth

曲线宽度,可以不是整数

linestyle

character

description

'-'

solid line style

'--'

dashed line style

'-.'

dash-dot line style

':'

dotted line style

marker

character

description

'.'

point marker点

','

pixel marker一个像素点

'o'

circle marker实心圆

'v'

triangle_down marker

'^'

triangle_up marker

'<'

triangle_left marker

'>'

triangle_right marker

'1'

tri_down marker

'2'

tri_up marker

'3'

tri_left marker

'4'

tri_right marker

's'

square marker方块

'p'

pentagon marker五边形

'*'

star marker五角星

'h'

hexagon1 marker六边形

'H'

hexagon2 marker横六边形

'+'

plus marker

'x'

x marker

'D'

diamond marker菱形

'd'

thin_diamond marker瘦菱形

“’

‘“

'_'

hline marker横线

color

character

color

‘b’

blue

‘g’

green

‘r’

red

‘c’

cyan

‘m’

magenta

‘y’

yellow

‘k’

black

‘w’

white

line的其他参数

antialiased or aa: [True | False]
axes: an :class:`~matplotlib.axes.Axes` instance
clip_box: a :class:`matplotlib.transforms.Bbox` instance
clip_on: [True | False]
clip_path: [ (:class:`~matplotlib.path.Path`, :class:`~matplotlib.transforms.Transform`) | :class:`~matplotlib.patches.Patch` | None ]
contains: a callable function
dash_capstyle: ['butt' | 'round' | 'projecting']
dash_joinstyle: ['miter' | 'round' | 'bevel']
dashes: sequence of on/off ink in points
drawstyle: ['default' | 'steps' | 'steps-pre' | 'steps-mid' | 'steps-post']
figure: a :class:`matplotlib.figure.Figure` instance
fillstyle: ['full' | 'left' | 'right' | 'bottom' | 'top' | 'none']
gid: an id string
label: string or anything printable with '%s' conversion.
linestyle
markeredgecolor or mec: any matplotlib color
markeredgewidth or mew: float value in points
markerfacecolor or mfc: any matplotlib color
markerfacecoloralt or mfcalt: any matplotlib color
markersize or ms: float
markevery: [None | int | length-2 tuple of int | slice | list/array of int | float | length-2 tuple of float]
path_effects: unknown
picker: float distance in points or callable pick function ``fn(artist, event)``
pickradius: float distance in points
rasterized: [True | False | None]
sketch_params: unknown
snap: unknown
solid_capstyle: ['butt' | 'round' |  'projecting']
solid_joinstyle: ['miter' | 'round' | 'bevel']
transform: a :class:`matplotlib.transforms.Transform` instance
url: a url string
xdata: 1D array
ydata: 1D array

patch

bar()和hist()都是创建Patch对象列表
每个Patch列表中

n,bins,rects=ax.hist(...)
  • 这里的rects是
  • rects[0]是
import matplotlib.pyplot as plt
from scipy.stats import norm

f1 = plt.figure(1)
ax = plt.subplot(111)
n, bins, rects = ax.hist(norm.rvs(loc=0, scale=1, size=100))
rects

Axis

fig = plt.figure(1)
ax = fig.add_subplot(111)
line=ax.plot([1,2,3,4,5])
xaxis=ax.xaxis
plt.getp(xaxis)

可以获得它们的属性:

agg_filter = None
alpha = None
animated = False
axes = Axes(0.125,0.11;0.775x0.77)
children = [<matplotlib.text.Text object at 0x0000020033F2F78...>]
clip_box = TransformedBbox(Bbox([[0.0, 0.0], [1.0, 1.0]]), Co...)
clip_on = True
clip_path = None
contains = None
data_interval = [ 0.  4.]
figure = Figure(640x480)
gid = None
gridlines = <a list of 11 Line2D gridline objects>
label = Text(0.5,0,'')
label_position = bottom
label_text =
major_formatter = <matplotlib.ticker.ScalarFormatter>
major_locator = <matplotlib.ticker.AutoLocator>
major_ticks = [<matplotlib.axis.XTick>]
majorticklabels = <a list of 11 Text major ticklabel objects>
majorticklines = <a list of 22 Line2D ticklines objects>
majorticklocs = [-0.5  0.   0.5  1.   1.5  2. ]...
minor_formatter = <matplotlib.ticker.NullFormatter>
minor_locator = <matplotlib.ticker.NullLocator>
minor_ticks = []
minorticklabels = <a list of 0 Text minor ticklabel objects>
minorticklines = <a list of 0 Line2D ticklines objects>
minorticklocs = []
minpos = 1.0
offset_text = Text(1,0,'')
path_effects = []
picker = None
pickradius = 15
rasterized = None
scale = linear
sketch_params = None
smart_bounds = False
snap = None
tick_padding = 3.5
tick_space = 11
ticklabels = <a list of 11 Text major ticklabel objects>
ticklines = <a list of 22 Line2D ticklines objects>
ticklocs = [-0.5  0.   0.5  1.   1.5  2. ]...
ticks_position = bottom
transform = IdentityTransform()
transformed_clip_path_and_affine = (None, None)
units = None
url = None
view_interval = [-0.2  4.2]
visible = True
zorder = 0

属性

意义

ticklocs

刻度位置

ticklabels

刻度对应的文字

annotate

用来绘制带箭头的注释文字

annotate(s,xy,xytext,xycoords='data',textcoords='data',arrowprops=None)
  • s:注释文本
  • xy:箭头处的坐标
  • xytext:注释文本的坐标
  • xycoords&textcoords都是字符串, 解释在下表

属性值

解释

figure points

以点为单位的坐标,图表左下角的坐标(0,0)

figure pixels

以像素为单位的坐标,图表左下角为(0,0)

figure fraction

图表坐标系中的坐标,左下角是(0,0),右上角是(1,1)

axes points

以点为单位的坐标,子图左下角的坐标(0,0)

axes pixels

以像素为单位的坐标,子图左下角的坐标(0,0)

axes fraction

子图坐标系中的坐标,左下角是(0,0),右上角是(1,1)

data

数据坐标系中的坐标

offset points

以点为单位,相对于点xy的坐标

polar

数据坐标系中的极坐标

test

用来绘制文字

ax.text(x,y,string,fontname='STKaiti',fontsize=20,color='r',transform=ax.transData)#数据坐标
ax.text(x,y,string,fontname='STKaiti',fontsize=20,color='r',transform=ax.transAxes)#Axes内坐标,左下是(0,0),右上是(1,1)
fig.text(x,y,string,fontname='STKaiti',fontsize=20,color='r',transform=ax.transData)#数据坐标
fig.text(x,y,string,fontname='STKaiti',fontsize=20,color='r',transform=ax.transAxes)#Figure内坐标,左下是(0,0),右上是(1,1)
  • fontname:字体,参见这里