matplotlib - 基于附加数据的绘图的多个标记

时间:2016-09-28 16:03:18

标签: python matplotlib

让我说我有以下数据说

x=[0,1,2,3,4,5,6,7,8,9]
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0]
z=['A','A','A','B','B','A','B','B','B','B']
plt.plot(x,y, marker='S')

会给我一个带方形标记的x-y图。有没有办法根据数据z更改标记类型,以便所有' A'类型有方形标记和' B' type有一个三角标记。

但我想添加' z'曲线上的数据仅在它从一种类型变为另一种类型时(在这种情况下从' A'到' B'反之亦然)

1 个答案:

答案 0 :(得分:1)

import matplotlib.pyplot as plt

fig = plt.figure(0)
x=[0,1,2,3,4,5,6,7,8,9]
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0]
z=['A','A','A','B','B','A','B','B','B','B']
plt.plot(x,y)

if 'A' in z and 'B' in z:
    xs = [a for a,b in zip(x, z) if b == 'A']
    ys = [a for a,b in zip(y, z) if b == 'A']
    plt.scatter(xs, ys, marker='s')

    xt = [a for a,b in zip(x, z) if b == 'B']
    yt = [a for a,b in zip(y, z) if b == 'B']
    plt.scatter(xt, yt, marker='^')
else:
    plt.scatter(x, y, marker='.', s=0)


plt.show()

或者

import matplotlib.pyplot as plt

fig = plt.figure(0)
x=[0,1,2,3,4,5,6,7,8,9]
y=[1.0,1.5,2.3,2.2,1.1,1.4,2.0,2.8,1.9,2.0]
z=['A','A','A','B','B','A','B','B','B','B']
plt.plot(x,y)

if 'A' in z and 'B' in z:
    plt.scatter(x, y, marker='s', s=list(map(lambda a: 20 if a == 'A' else 0, z)))
    plt.scatter(x, y, marker='^', s=list(map(lambda a: 20 if a == 'B' else 0, z)))
else:
    plt.scatter(x, y, marker='.', s=0)


plt.show()