因此,遵循教程,我尝试使用以下代码创建一个图形:
time_values = [i for i in range(1,100)]
execution_time = [random.randint(0,100) for i in range(1,100)]
fig = plt.figure()
ax1 = plt.subplot()
threshold=[.8 for i in range(len(execution_time))]
ax1.plot(time_values, execution_time)
ax1.margins(x=-.49, y=0)
ax1.fill_between(time_values,execution_time, 1,where=(execution_time>1), color='r', alpha=.3)
这不起作用,因为我得到了一个错误,说我不能比较一个列表和一个int。然而,我随后尝试:
ax1.fill_between(time_values,execution_time, 1)
这给了我一个图表,其中包含了执行时间和y=1线之间的所有区域。由于我希望y=1线上方的区域被填充,而下方的区域没有阴影,因此我创建了一个名为threshold的列表,并将其填充为1,以便我可以重新创建比较。然而,
ax1.fill_between(time_values,execution_time, 1,where=(execution_time>threshold)
和
ax1.fill_between(time_values,execution_time, 1)
创建完全相同的图,即使执行时间值确实超过1。
我感到困惑的原因有两个:首先,在我看的教程中,老师能够成功地比较一个列表和一个整数在fill_between函数中,为什么我不能这样做?其次,为什么where参数没有标识我想要填充的区域?即,为什么图形在y=1和执行时间值之间的区域有阴影?
1条答案
按热度按时间eulz3vhy1#
这个问题主要是由于使用了python列表而不是numpy数组。显然你可以使用列表,但是你需要在整个代码中使用它们。
更好的是在整个过程中使用numpy数组,它不仅更快,而且更容易编码和理解。