动手学深度学习-导数和微分-第二章plot函数理解

Jupyter Notebook中显示SVG格式的图形的函数

def use_svg_display(): #@save
"""使用svg格式在Jupyter中显示绘图"""
	backend_inline.set_matplotlib_formats('svg')
	"""调用Matplotlib库的函数,用于设置图形的显示格式。"""

设置图表大小

def set_figsize(figsize=(3.5, 2.5)): #@save
"""设置matplotlib的图表大小"""
	use_svg_display()
	d2l.plt.rcParams['figure.figsize'] = figsize

设置由matplotlib生成图表的轴的属性。

#@save
def set_axes(axes, xlabel, ylabel, xlim, ylim, xscale, yscale, legend):
	"""设置matplotlib的轴"""
	axes.set_xlabel(xlabel)
	axes.set_ylabel(ylabel)
	axes.set_xscale(xscale)
	axes.set_yscale(yscale)
	axes.set_xlim(xlim)
	axes.set_ylim(ylim)
	if legend:
		axes.legend(legend)
	axes.grid()

axes: Matplotlib图形对象的轴对象。
xlabel: x轴的标签。
ylabel: y轴的标签。
xlim: x轴的范围。
ylim: y轴的范围。
xscale: x轴的刻度缩放类型。
yscale: y轴的刻度缩放类型。
legend: 图例的内容。
axes.grid(): 在图形中添加网格线

通过这三个用于图形配置的函数,定义一个plot函数来简洁地绘制多条曲线

#@save
def plot(X,Y=None,xlabel=None,ylabel=None,legend=None,xlim=None,ylim=None,xscale='linear',yscale='linear',
        fmts=('-','m--','g-','r:'),figsize=(3.5,2.5),axes=None):
    if legend is None:
        legend=[]
    set_figsize(figsize)
    axes=axes if axes else d2l.plt.gca()
    def has_one_axis(X):
        return (hasattr(X,"ndim") and X.ndim==1 or isinstance(X,list)
               and not hasattr(X[0],"__len__"))
    if has_one_axis(X):
        X=[X]
    if Y is None:
        X,Y=[[]]*len(X),X
    elif has_one_axis(Y):
        Y=[Y]
    if len(X)!=len(Y):
        X=X*len(Y)
    axes.cla()
    for x,y,fmt in zip(X,Y,fmts):
        if len(x):
            axes.plot(x,y,fmt)
        else :
            axes.plot(y,fmt)
    set_axes(axes,xlabel,ylabel,xlim,ylim,xscale,yscale,legend)

X: x轴的数据。可以是单个数组或列表,也可以是多个数组或列表的集合。
Y: y轴的数据。可以是单个数组或列表,也可以是多个数组或列表的集合。如果未提供Y,则默认将X作为Y数据。
fmts: 绘图的格式列表。默认为(‘-’,‘m–’,‘g-’,‘r:’),表示使用不同的线型和颜色进行绘制。
‘-’: 实线
‘–’: 虚线
‘-.’: 点划线
‘:’: 点线
‘m’: 品红色(magenta)
‘g’: 绿色(green)
‘r’: 红色(red)
axes=axes if axes else d2l.plt.gca(): 如果未提供axes参数,则将其设置为当前活动轴。

def has_one_axis(X): …: 这是一个内部函数,用于判断X是否是单轴数据。它返回一个布尔值,表示X是否是一维数组或列表。
1.hasattr(X, “ndim”) and X.ndim == 1: 这个条件判断X是否具有ndim属性,并且ndim属性的值是否为1。这里假设X是一个NumPy数组或类似的数据结构,ndim表示数组的维度数。如果X是一维数组,那么ndim的值应该为1。

2.isinstance(X, list) and not hasattr(X[0], “len”): 这个条件判断X是否为一个列表,并且列表的第一个元素是否没有__len__属性。__len__属性用于获取对象的长度或元素个数。这个判断意味着如果X是一个列表,并且列表的第一个元素没有__len__属性,那么X可以被视为单轴数据。

if has_one_axis(X): X=[X]: 如果X是单轴数据,则将其转换为一个包含单个元素的列表。

if Y is None: X,Y=[[]]*len(X),X: 如果未提供Y参数,则将X作为Y数据,并将X设置为空列表。

elif has_one_axis(Y): Y=[Y]: 如果Y是单轴数据,则将其转换为一个包含单个元素的列表。

if len(X)!=len(Y): X=X*len(Y): 如果X和Y的长度不一致,则将X复制为与Y相同长度的列表。

axes.cla(): 清除轴上的当前图形。

for x,y,fmt in zip(X,Y,fmts): …: 遍历X和Y的元素以及fmts列表,并使用plot函数绘制图形。

if len(x): axes.plot(x,y,fmt) else: axes.plot(y,fmt): 如果x不为空,则使用x和y数据绘制图形;否则,仅使用y数据绘制图形。

set_axes(axes,xlabel,ylabel,xlim,ylim,xscale,yscale,legend): 调用set_axes函数设置轴的属性,包括标签、范围、刻度类型、图例和网格线。

x = np.arange(0, 3, 0.1)
plot(x, [f(x), 2 * x - 3], 'x', 'f(x)', legend=['f(x)', 'Tangent line (x=1)'])

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值