嗨,我有一个3D列表(我意识到这可能不是我数据的最佳表示,所以任何建议都赞赏),因此:
y_data = [
[[a,0],[b,1],[c,None],[d,6],[e,7]],
[[a,5],[b,2],[c,1],[d,None],[e,1]],
[[a,3],[b,None],[c,4],[d,9],[e,None]],
]
y轴数据是每个子列表是一小时的值列表。小时是x轴数据。每个子列表都具有以下格式: [标签,价值]
基本上是这样的:
line a is [0,5,3] on the y-axis
line b is [1,2,None] on the y-axis etc.
我的x数据是:
x_data = [0,1,2,3,4]
现在我直接绘制这个列表,即
for i in range(0,5):
ax.plot(x_data, [row[i][1] for row in y_data], label=y_data[0][i][0])
我得到一个折线图,但是值为“无”时,未绘制点并且未连接线。
我想要做的是有一个图表,它将以其当前格式绘制我的数据,但忽略缺失点并在缺失数据之前的点和之后的点之间画一条线(即插入缺失点)
我尝试过这样做https://stackoverflow.com/a/14399830/1800665,但我无法解决如何为3D列表执行此操作。
感谢您的帮助!
答案 0 :(得分:1)
您链接的一般方法在这里可以正常工作;看起来你问的问题是如何将这种方法应用于你的数据。我想建议通过分析你正在绘制的数据,你会更清楚地看到如何做。
import numpy as np
y_data = [
[[a,0],[b,1],[c,None],[d,6],[e,7]],
[[a,5],[b,2],[c,1],[d,None],[e,1]],
[[a,3],[b,None],[c,4],[d,9],[e,None]],
]
x_data = [0, 1, 2, 3, 4]
for i in range(5):
xv = []
yv = []
for j, v in enumerate(row[i][1] for row in y_data):
if v is not None:
xv.append(j)
yv.append(v)
ax.plot(xv, yv, label=y_data[0][i][0])
这里没有使用像链接问题/答案中的掩码,而是明确地建立了要绘制的有效数据点列表。