首页 > 解决方案 > 如何在给定条件下递归地为绘图文本添加一行代码

问题描述

因此,从下面的这张图中,我找到了离散点及其索引。当我们绘制最终图形时,该图形应具有不连续发生的确切时间以及应在不连续处添加垂直线的信息。为了做到这一点,我必须将“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()

标签: pythonclassmatplotlib

解决方案


一般来说,最好直接循环一个集合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()

推荐阅读