因此,按照本教程,我尝试使用以下代码创建图形:
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)
这没有用,因为我收到一个错误消息,说我无法比较列表和整数。 但是,我随后尝试:
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和执行时间值之间的区域中存在图形阴影?
答案 0 :(得分:0)
问题主要是由于使用python列表而不是numpy数组。显然,您可以使用列表,但是随后您需要在整个代码中使用它们。
function gt_custom_post_type(){
register_post_type('project',
array(
'rewrite' => array('slug' => 'projects'),
'labels'=> array(
'name'=> 'Projects',
'singular_name'=> 'Project',
'add_new_item'=> 'Add New Project',
'edit_item' => 'Edit Project'
),
'menu-icon'=> 'dachicons-clipboard',
'public' => true,
'has_archive' => true,
'support' => array(
'title', 'thumbnail', 'editor', 'excerpt', 'comments'
),
)
);
};
add_action('init', 'gt_custom_post_type');
更好的方法是始终使用numpy数组。它不仅速度更快,而且更易于编码和理解。
import numpy as np
import matplotlib.pyplot as plt
time_values = list(range(1,100))
execution_time = [np.random.randint(0,100) for _ in range(len(time_values))]
threshold = 50
fig, ax = plt.subplots()
ax.plot(time_values, execution_time)
ax.fill_between(time_values, execution_time, threshold,
where= [e > threshold for e in execution_time],
color='r', alpha=.3)
ax.set_ylim(0,None)
plt.show()