我正在迭代许多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方式的任何建议吗?
答案 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()