python - 如何在给定条件下递归地为绘图文本添加一行代码
问题描述
因此,从下面的这张图中,我找到了离散点及其索引。当我们绘制最终图形时,该图形应具有不连续发生的确切时间以及应在不连续处添加垂直线的信息。为了做到这一点,我必须将“plt.axvline”和“plt.text”作为一对添加在一起。
我在这里写了这样的代码:
但是,每当新索引出现时,手动添加两行代码非常不方便,如果出现 100 个不连续性,几乎不可能添加它们。
我正在考虑像“类”这样的面向对象方法,但我不知道从哪里开始..
知道如何在知道索引长度的情况下递归地添加它吗?
if len(idx) == 1 :
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.13, '{}'.format(send_time[idx[0]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
elif len(idx) == 2:
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.10, '{}\n{}'.format(send_time[idx[0]], time1[idx[0]]))
plt.axvline(x=idx[1], color = 'b')
plt.text(idx[1],.10, '{}'.format(send_time[idx[1]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
elif len(idx) == 3:
plt.figure(figsize = (20,10))
plt.axvline(x=idx[0], color = 'r')
plt.text(idx[0],.13, '{}\n{}'.format(send_time[idx[0]],time1[idx[0]]))
plt.axvline(x=idx[1], color = 'b')
plt.text(idx[1],.12, '{}\n{}'.format(send_time[idx[1]],time1[idx[1]]))
plt.axvline(x=idx[2], color = 'y')
plt.text(idx[2],.11, '{}'.format(send_time[idx[2]-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
解决方案
一般来说,最好直接循环一个集合for item in collection
而不是使用索引。
plt.figure(figsize = (20,10))
for num in idx:
plt.axvline(num, color = 'r')
plt.text(num, .13, '{}'.format(send_time[num-1]))
plt.title(var)
plt.scatter(x, result, alpha = alp)
plt.savefig("XXX.png")
plt.close()
推荐阅读
- php - 如何显示雇主状态
- chainer - chainer 中的损失函数保持为零
- xcode - 我在我的 xcode 故事板 - 页面视图控制器中删除了*显然*有用的 XML 代码
- xml - 如何从其他站点获取 World Community Grid 团队统计信息?
- asterisk - Asterisk Dialplan:如何检测呼叫是否已成功接听?
- linux - 重命名多个目录中的多个文件
- c++ - OpenSSL:读取 EC 密钥,然后再次写入,结果不同
- c# - 使用 Microsoft Fakes 填充 SerialPort 对象
- php - 如何在 laravel 中使用视图来分块()?
- wordpress - 如何找到托管在 EC2 实例上的 WordPress 站点的 FTP 凭证?