matplotlib连接散点图中的点

时间:2018-06-01 14:35:14

标签: python matplotlib

我正在尝试可视化有关进程运行或运行的时间以及空闲时间的一些数据。对于每个进程,我有a_x_axis进程开始运行的时间,a_live_for是它醒来后的有效时间。我为每个进程都有两个数据点。我试图通过连接第一个绿点与第一个红点和第二个绿点与第二个红点连接这两个点,依此类推,所以我可以看到大数据集中每个进程的活动和空闲时间。我查看了散点图示例,但找不到任何解决此问题的方法。

import matplotlib.pyplot as plt

a_x_axis = [32, 30, 40, 50, 60, 78]
a_live = [1, 3, 2, 1, 2, 4]

a_alive_for = [a + b for a, b in zip(a_x_axis, a_live)]

b_x_axis = [22, 25, 45, 55, 60, 72]
b_live = [1, 3, 2, 1, 2, 4]
b_alive_for = [a + b for a, b in zip(b_x_axis, b_live)]

a_y_axis = []
b_y_axis = []

for i in range(0, len(a_x_axis)):
    a_y_axis.append('process-1')
    b_y_axis.append('process-2')


print("size of a: %s" % len(a_x_axis))
print("size of a: %s" % len(a_y_axis))
plt.xlabel('time (s)')
plt.scatter(a_x_axis, [1]*len(a_x_axis))
plt.scatter(a_alive_for, [1]*len(a_x_axis))

plt.scatter(b_x_axis, [2]*len(b_x_axis))
plt.scatter(b_alive_for, [2]*len(b_x_axis))

plt.show()

enter image description here

2 个答案:

答案 0 :(得分:1)

你需要:

import matplotlib.pyplot as plt

a_x_axis = [32, 30, 40, 50, 60, 78]
a_live = [1, 3, 2, 1, 2, 4]

a_alive_for = [a + b for a, b in zip(a_x_axis, a_live)]

b_x_axis = [22, 25, 45, 55, 60, 72]
b_live = [1, 3, 2, 1, 2, 4]
b_alive_for = [a + b for a, b in zip(b_x_axis, b_live)]

a_y_axis = []
b_y_axis = []

for i in range(0, len(a_x_axis)):
    a_y_axis.append('process-1')
    b_y_axis.append('process-2')


print("size of a: %s" % len(a_x_axis))
print("size of a: %s" % len(a_y_axis))
plt.xlabel('time (s)')
plt.scatter(a_x_axis, [1]*len(a_x_axis))
plt.scatter(a_alive_for, [1]*len(a_x_axis))

plt.scatter(b_x_axis, [2]*len(b_x_axis))
plt.scatter(b_alive_for, [2]*len(b_x_axis))

for i in range(0, len(a_x_axis)):
    plt.plot([a_x_axis[i],a_alive_for[i]], [1,1], 'green')

for i in range(0, len(b_x_axis)):
    plt.plot([b_x_axis[i],b_alive_for[i]], [2,2], 'green')

plt.show()

输出:

enter image description here

答案 1 :(得分:0)

scatter不是用于绘制线条的工具,它是plot。它接受x和y坐标的二维数组,因此您不必手动迭代列表。所以你需要......喜欢

plt.plot([a_x_axis, a_alive_for], [[1]*n,[1]*n], 'green')

n = len(a_x_axis)

但是,您可以在numpy数组或pandas数据帧中更好地构建数据,您也可以在其中为列设置标题。 (是这样,你想通过将'process-x'附加到数据列表来实现的目标......?)

另外,你的标记颜色在我看来并非按目的选择;如果你想让它们像线条一样,你甚至可以完全离开scatter