在matplotlib中制作多个数字,每个数字都带有图例

时间:2017-03-21 21:45:51

标签: python python-2.7 matplotlib

我正在尝试并行制作多个数字,每个数字都有自己的图例。我的代码产生了多个数字,但我只能让传奇出现在最后一个数字实例上 - 有没有办法让它出现在所有数字上?我有大量的数据集,所以我希望能够使用for循环(或类似的) - 分别制作每个数字并不是一个选项。

我在下面列出了一个可以重现问题的最低工作示例。

import numpy as np
import matplotlib.pyplot as plt

X1 = np.linspace(0,5,5)
X2 = np.linspace(1,6,5)
Y1 = np.power(X1,2)
Y2 = np.power(X2,2)
Z1 = np.power(X1,3)
Z2 = np.power(X2,3)

Xs = [X1,X2]
Ys = [Y1,Y2]
Zs = [Z1,Z2]

# Marker size
size = 100

for x,y,z, in zip(Xs,Ys,Zs):
    plt.figure()
    ax = plt.subplot(111)
    ax.scatter(x,y,linewidth=1.5,s=size,facecolors='#0571b0',marker='o',alpha=0.5,label='A label')
    ax.scatter(x,z,linewidth=1.5,s=size,facecolors='#92c5de',marker='o',alpha=0.5,label='Another label')
    plt.legend(bbox_to_anchor=(1.45,1.), loc='top left',scatterpoints=1,fontsize=8)

plt.show()

1 个答案:

答案 0 :(得分:0)

看起来这个传说完全脱离了这个世界。您将它放在(1.45, 1)(在轴坐标中。将它放在(1,1)并将位置设置为loc="upper right"(注意“左上角”不存在)将生成图例情节。

以下是完整的示例:

import numpy as np
import matplotlib.pyplot as plt

X1 = np.linspace(0,5,5)
X2 = np.linspace(1,6,5)
Xs = [X1,X2]
Ys = [X1**2,X2**2]
Zs = [X1**3,X2**3]

# Marker size
size = 100

for x,y,z, in zip(Xs,Ys,Zs):
    plt.figure()
    ax = plt.subplot(111)
    ax.scatter(x,y,linewidth=1.5,s=size,facecolors='#0571b0',marker='o',alpha=0.5,label='A label')
    ax.scatter(x,z,linewidth=1.5,s=size,facecolors='#92c5de',marker='o',alpha=0.5,label='Another label')
    plt.legend(bbox_to_anchor=(1,1), loc='upper right',scatterpoints=1,fontsize=8)

plt.show()