散射矩阵的熊猫传奇

NG.*_*NG. 6 python matplotlib pandas

我有一个pandas数据帧,包含3个类和n个特征的数据点.

以下代码生成一个散射矩阵,其中包含对角线中的直方图,数据帧中有4个要素.

colums = ['n1','n2','n3','n4']
grr = pd.scatter_matrix(
dataframe[columns], c=y_train, figsize=(15,15), label=['B','N','O'], marker='.',
    hist_kwds={'bins':20}, s=10, alpha=.8, cmap='brg')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

像这样:

此数据帧的分散矩阵

我遇到的问题是plt.legend()似乎不起作用,它根本没有显示任何图例(或者它是第二行第一列中几乎看不见的小'le8')

我想要的是一个单一的图例,它只显示哪个颜色是哪个类.

我已经尝试了所有建议的问题,但没有一个有解决方案.我还尝试将标签放在图例功能参数中,如下所示:

plt.legend(label=['B','N','O'], loc=1)
Run Code Online (Sandbox Code Playgroud)

但无济于事..

我究竟做错了什么?

Imp*_*est 6

熊猫scatter_matrix是几个matplotlib scatter图的包装。参数将传递给scatter函数。但是,散点图通常是与颜色图一起使用,而不是与带有离散标记点的图例一起使用,因此没有可用的参数来自动创建图例。

很抱歉,您必须手动创建图例。为此,您可以使用matplotlib的plot函数(具有空数据)从散点图中创建点,并将其添加为图例的句柄。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams["figure.subplot.right"] = 0.8

v= np.random.rayleigh(size=(30,5))
v[:,4] = np.random.randint(1,4,size=30)/3.
dataframe= pd.DataFrame(v, columns=['n1','n2','n3','n4',"c"])

columns = ['n1','n2','n3','n4']
grr = pd.scatter_matrix(
dataframe[columns], c=dataframe["c"], figsize=(7,5), label=['B','N','O'], marker='.',
    hist_kwds={'bins':20}, s=10, alpha=.8, cmap='brg')

handles = [plt.plot([],[],color=plt.cm.brg(i/2.), ls="", marker=".", \
                    markersize=np.sqrt(10))[0] for i in range(3)]
labels=["Label A", "Label B", "Label C"]
plt.legend(handles, labels, loc=(1.02,0))
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明