Python 将图例添加到颜色为动态的matplotlib散点图中
我用Matplolib和Pandas数据框创建了散点图,现在我想给它添加一个图例。这是我的密码:Python 将图例添加到颜色为动态的matplotlib散点图中,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我用Matplolib和Pandas数据框创建了散点图,现在我想给它添加一个图例。这是我的密码: colors = ['red' if x >= 150 and x < 200 else 'green' if x >= 200 and x < 400 else 'purple' if x >= 400 and x < 600 else 'yellow' if x >= 600 else 'te
colors = ['red' if x >= 150 and x < 200 else
'green' if x >= 200 and x < 400 else
'purple' if x >= 400 and x < 600 else
'yellow' if x >= 600 else 'teal' for x in myData.R]
ax1.scatter(myData.X, myData.Y, s=20, c=colors, marker='_', label='Test')
ax1.legend(loc='upper left', frameon=False)
我试过了,但我不明白的是:
感谢您的任何建议 可以加速的代码的一部分是使用普通Python循环创建字符串列表。 熊猫非常有效地使用numpy的过滤。 绘制散点图主要取决于点的数量,当一次绘制所有点或将所有点分为五部分单独绘制时,点的数量不会改变 一些使用matplotlib在循环中分散的示例代码:
从matplotlib导入pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
N=500
myData=pd.DataFrame({'X':np.round(np.random.uniform(-10001000,N),-2),
'Y':np.随机.均匀(-800800,N)})
myData['R']=np.sqrt(myData.X**2+myData.Y**2)
图,ax1=plt.子批次()
边界=[150200400600]
颜色=['teal'、'red'、'green'、'purple'、'gold']
对于b0、b1、zip中的列([None]+边界,边界+[None],颜色):
如果b0为无:
过滤器=(myData.R=b0)
label=f'${b0}≤ R$'
其他:
过滤器=(myData.R>=b0)和(myData.R
或者,熊猫的cut
可用于创建类别,seaborn的特征(如其hue
参数)可进行着色并自动创建图例
从matplotlib导入pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
导入seaborn作为sns
N=500
myData=pd.DataFrame({'X':np.round(np.random.uniform(-10001000,N),-2),'Y':np.random.uniform(-800800,N)})
myData['R']=np.sqrt(myData.X**2+myData.Y**2)
图,ax1=plt.子批次()
边界=[150200400600]
颜色=['teal'、'red'、'green'、'purple'、'gold']
hues=pd.cut(myData.R[0]+bounds+[2000],right=False)
sns.scatterplot(myData.X,myData.Y,色调=色调,色调顺序=色调.cat.categories,调色板=颜色,s=20,标记=“”,ax=ax1)
plt.show()
不确定,但它在中指出散点图应具有
cmap
和vmin
和vmax
参数。他们没有解决你的问题吗?不是传说,您可以有一个自定义的颜色栏。另一个想法是根据myData.R
将myData.X
和myData.Y
预先分割到特定的彩色数据集中,并将每个子集作为额外的散点图添加到具有固定颜色和标签的图形中。@RolandDeschain因此,我们的想法是为所有人制作散点图红色元素,绿色元素,等等?但是,生成不是需要更多的时间吗?取决于您有多少数据点。绘图本身不应该成为问题,划分到子集可能需要最长的时间,但如果可以使用numpy以某种矢量化方式进行,则可能会很快。这是为了某种动画吗?显示了我在颜色栏中的意思(在答案中)。您可以创建自定义范围并绘制完整的数据集,然后根据您在颜色栏中的设置以颜色进行绘制。散点图也支持这些。很好!这两种方法都非常有效,我想我会选择第一种,因为我想坚持使用MPL,而不添加新的依赖项,如Seaborn。多谢各位!我还找到了另一个解决方案,但它是“黑客式的”:,基本上它可以独立地从情节中创建图例,当然,按照您的建议做会更好,因为图例是直接从数据生成的
X Y R
0 1 945 1236.334519
0 1 950 212.809352
0 1 950 290.663847
0 1 961 158.156856