Как нанести аннотации на каждую ось lmplot? - PullRequest
0 голосов
/ 08 апреля 2019

Сейчас я занимаюсь машинным обучением и хотел бы добавить аннотации на графиках кластеризации.

Здесь я использую данные образцов почвы и пытаюсь разделить их на несколько групп. Когда я сосредотачиваюсь на определенном элементе, я хотел бы видеть корреляции других элементов или узнать идентификаторы образцов и посмотреть их на карте. Сейчас я пытаюсь поставить ID на графиках, но я не уверен, как это сделать с помощью lmplots.

import pandas as pd
import seaborn as sns
sns.set()

data=pd.read_csv("E:\Programming\Python\Matplotlib\Geochemi_test3.csv", index_col=0) #reading my dataset

data_x = data.drop(labels=["E","N","B_ppm","Geology","Height"], axis=1)
data_y=data["Geology"]


from sklearn.decomposition import PCA

model = PCA(n_components=2)
model.fit(data_x)
X_2D = model.transform(data_x)
data['PCA1'] = X_2D[:, 0]
data['PCA2'] = X_2D[:, 1]
#sns.lmplot("PCA1", "PCA2", data=data, hue="Geology", fit_reg=False)


from sklearn.mixture import GaussianMixture as GMM
model = GMM(n_components=4,covariance_type='full')
model.fit(data_x)
y_gmm = model.predict(data_x)


data['cluster'] = y_gmm

fgrid = sns.lmplot("PCA1", "PCA2", data=data, hue="Se_ppm", col="cluster",fit_reg=False)
ax = fgrid.axes[0,0]
p1=sns.regplot(data=data, x="PCA1", y="PCA2", fit_reg=False, marker="o", scatter_kws={'s':10})

for line in range(0,data.shape[0]):
     p1.text(data.PCA1[line]+0.2, data.PCA2[line], data.index[line], horizontalalignment='left', size='medium', color='black', weight='semibold')

В результате этого кода я получаю этот участок. enter image description here Можно ли добавить аннотации по каждой оси? Здесь аннотации показаны только на правильных осях. Когда я искал аннотации, я мог найти только графики на regplot. Можно ли комментировать также lmplot, который разделен на столбцы?

1 Ответ

1 голос
/ 08 апреля 2019

Возвращение lmplot - это FacetGrid.Вам нужно указать каждый объект Axes в FacetGrid, чтобы аннотировать каждый.Примерно так:

for ax in fgrid.axes:
    for line in range(0,data.shape[0]): 
        ax.text(...)

Однако вы, кажется, перезаписали последний объект Axes с помощью вашего вызова regplot.Я не уверен, намеренно ли это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...