Python 在matplotlib中制作多个图形,每个图形上都有图例
我正在尝试平行制作多个人物,每个人物都有自己的传奇。我的代码生成多个图形,但我只能让图例显示在最后一个图形实例上——有没有办法让它显示在所有图形上?我有大量的数据集,所以我希望能够使用for循环(或类似的循环)——单独制作每个图形实际上不是一个选项 我在下面列出了一个再现问题的最小工作示例Python 在matplotlib中制作多个图形,每个图形上都有图例,python,python-2.7,matplotlib,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 =
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.45,1)
(在轴坐标中。将其放置在(1,1)并设置位置,例如设置为loc=“右上方”
(注意,“左上方”不存在),将在绘图中生成图例
以下是完整的示例:
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()
图例似乎不在图中。您将其放置在
(1.45,1)
(在轴坐标中。将其放置在(1,1)并设置位置,例如设置为loc=“右上方”
(注意,“左上方”不存在),将在绘图中生成图例
以下是完整的示例:
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()
啊哈,谢谢!这很有效。我就知道我在做傻事。我还有一个问题-在你的解决方案中,我对图例所做的编辑(例如fontsize)只出现在除最后一个图形实例之外的所有图形实例中。最后一个图形实例没有得到这些编辑-你知道这是为什么吗?我如何确保所有图例都相同?我无法复制此问题。当我运行上述操作时,两个图例都是相同的。而且当我更改fontsize时,它将对两个图例产生相同的影响。啊,谢谢!Tha我知道我在做傻事。我还有一个问题——在你的解决方案中,我对图例所做的编辑(例如fontsize)仅出现在除最后一个地物实例之外的所有实例中。最后一个地物实例没有得到这些编辑-你知道这是为什么吗?我如何确保所有图例都相同?我无法复制此问题。当我运行上述操作时,两个图例都是相同的。此外,当我更改fontsize时,它将对两个图例产生相同的影响。