Почему я не могу получить цветовую маркировку для umap.plot () в Python после преобразования набора данных iris во фрейм данных с pandas? - PullRequest
1 голос
/ 30 апреля 2020

Я пытаюсь создать эстетически приятный график для трех видов радужной оболочки в наборе данных с точками в 2D-вкраплении, соответственно окрашенными. Я знаю о других способах достижения этого, но я хотел бы попросить помощи в разработке морщин, чтобы получить хороший график с примерами, окрашенными соответствующим образом с помощью umap.plot (). Вот код, который работает, если пропущена линия о метках на графике (за исключением того, что тогда нет цветов):

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import seaborn as sns
import umap
import umap.plot
import holoviews
import datashader
from bokeh.plotting import show, save, output_notebook, output_file
from bokeh.resources import INLINE 


dataset=load_iris()
data=pd.DataFrame(dataset["data"],columns=["Petal length","Petal Width","Sepal Length","Sepal Width"])
data["Species"]=dataset["target"]
data["Species"]=data["Species"].apply(lambda x: dataset["target_names"][x])

embedding = umap.UMAP(n_components=2, metric='hellinger').fit(data.iloc[:,[0,1,2,3]])


f = umap.plot.interactive(embedding, 
                          hover_data=data.iloc[:,[4]],
                          labels= data.iloc[:,[4]],
                          point_size=10)
output_notebook(resources=INLINE)
show(f)

Для упрощения, это бесцветный (и бесполезно) код:

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import seaborn as sns
import umap
import umap.plot
import holoviews
import datashader
from bokeh.plotting import show, save, output_notebook, output_file
from bokeh.resources import INLINE 


dataset=load_iris()
data=pd.DataFrame(dataset["data"],columns=["Petal length","Petal Width","Sepal Length","Sepal Width"])
data["Species"]=dataset["target"]
data["Species"]=data["Species"].apply(lambda x: dataset["target_names"][x])

embedding = umap.UMAP(n_components=2, metric='hellinger').fit(data.iloc[:,[0,1,2,3]])


f = umap.plot.interactive(embedding, 
                          hover_data=data.iloc[:,[4]],
                          point_size=10)
output_notebook(resources=INLINE)
show(f)

И это другой способ фактически обойти все создание фрейма данных (что я действительно не хочу делать), и go непосредственно в набор данных для создать сюжет - на мой взгляд, он все еще очень уродлив с некоторыми незаметными в легком загаре точками и огромным исполнением, которое заставляет прокручивать окно, но оно интерактивно:

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
import pandas as pd
import numpy as np
import seaborn as sns
import umap
import umap.plot

import holoviews
import datashader
from bokeh.plotting import show, save, output_notebook, output_file
from bokeh.resources import INLINE 

iris = load_iris()
embedding = umap.UMAP(n_components=2, metric='hellinger').fit(iris.data)

category_labels = pd.Series(iris.target).map(dict(zip(range(3),iris.target_names)))
hover_df = pd.DataFrame(category_labels, columns=['category'])
f = umap.plot.interactive(embedding, labels=category_labels,
                          hover_data=hover_df, point_size=10)
output_notebook(resources=INLINE)
show(f)

enter image description here

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