首页 > 解决方案 > MatPlot Lib 参数和 For 循环

问题描述

与绘图和以下用户定义函数有关的两个问题。作为背景,这是我第一次看到plt.plot在 for 循环中调用,这样每个点都是单独绘制的。我习惯于看到整个数组作为参数传递,例如 in plt.plot(x, f(x))。我的第一个问题是迭代每个点并每次调用 plt.plot 有什么好处?plt.plot(x, f(x))通过使用此方法而不是一次调用和传递所有点,是否对绘图有一些额外的控制?

我的第二个问题是关于下面函数中的样式参数。我不确定索引到包含单个字符的列表如何或为什么有效?styles = [‘b’]是一个包含单个字符的列表。所以我的期望是,任何带有非 0 参数的切片/索引都会引发异常。换句话说,我希望当 for 循环索引超过 0(例如styles[1], styles [2],等)时,会引发异常。我错过了什么?

import numpy as np
from pylab import plt, mpl
plt.style.use('seaborn')
mpl.rcParams['font.family'] = 'serif'
%matplotlib inline

def f(x):
    return np.sin(x) + 0.5 * x

def create_plot(x, y, styles, labels, axlabels):
    plt.figure(figsize=(10, 6))
    for i in range(len(x)):
        plt.plot(x[i], y[i], styles[i], label=labels[i])
        plt.xlabel(axlabels[0])
        plt.ylabel(axlabels[1])
        plt.legend(loc=0)

x = np.linspace(-2 * np.pi, 2 * np.pi, 50)

create_plot([x], [f(x)], ['b'], ['f(x)'], ['x', 'f(x)'])

标签: python-3.xmatplotlib

解决方案


在考虑了更多之后,我能够解决第二个问题。我没有意识到 [x] 是一个长度为 1 的列表,所以 for 循环只迭代一次,因此没有冲突,styles = ['b']因为唯一i实现的值是 0。


推荐阅读