python-3.x - 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)'])
解决方案
在考虑了更多之后,我能够解决第二个问题。我没有意识到 [x] 是一个长度为 1 的列表,所以 for 循环只迭代一次,因此没有冲突,styles = ['b']
因为唯一i
实现的值是 0。
推荐阅读
- list - 无法在 ValueListenableBuilder 中返回更新的小部件
- flutter - 在对象方法中颤振空安全条件
- verilog - always_latch 的复位信号的复位类型是什么?
- c++ - 类方法中的 Cout 什么都不做
- python - Coverage.py 只显示测试文件
- javascript - 多维数组;JavaScript; 算法
- reactjs - “警告:在列表中添加新元素时,列表中的每个孩子都应该有一个唯一的“关键”道具”
- c# - 带有 EF 网络核心的执行过程 Mysql
- javascript - lottie-player:有什么办法可以在动画加载后停止动画?
- python - 没有名为 (image_dehazer) 的模块