在matplotlib中设置标签的Pythonic方式

时间:2017-03-30 22:41:54

标签: python matplotlib

我正在迭代许多gpx数据列表,以创建2016年的累积训练图。为此,我按如下方式设置了一个循环,其中paces是一个平滑的起搏数据列表列表每个gpx文件和total_distances根据坐标数据计算的相关距离。

for i in range(0, len(paces)):

    if i == 0: 
        # need offset on paces from filtered data/NaN
        plt.plot(total_distances[i:i+1][0], 
                 paces[i:i+1][0][10:len(paces[i:i+1][0])+1], 
                 linewidth=.5, ls='-', color='#00FF00', label = 'all runs')
    else:
        plt.plot(total_distances[i:i+1][0], 
                 paces[i:i+1][0][10:len(paces[i:i+1][0])+1], 
                 linewidth=.5, ls='-', color='#00FF00')

如果我不使用上述条件,则标签的打印次数与列表一样多。

有关我的pythonic方式的任何建议吗?

2 个答案:

答案 0 :(得分:1)

没有实际数据,我无法测试我的答案,但我相信您应该使用此代码:

for i,(distance,pace) in enumerate(zip(total_distances, paces)):
    plt.plot(distance, pace[10:],
             linewidth=.5, ls='-', color='#00FF00', 
             label='' if i else 'all runs')

答案 1 :(得分:1)

我不知道pythonic意味着什么(每个人似乎都有不同的理解),但这里有一个可能更容易实现的解决方案。

这个想法是基于matplotlib忽略以下划线(_)开头的标签这一事实。因此,在循环中向标签添加i下划线,只留下没有下划线的第一个标签。然后显示标签。

import matplotlib.pyplot as plt

x = range(39)
y = range(39)

for i in range(len(x)-1):
    plt.plot(x[i:i+2],y[i:i+2], lw=10, label="_"*i + "label")

plt.legend(borderpad=1.5)
plt.show()

enter image description here