首页 > 解决方案 > 为什么在将 iris 数据集转换为带有 pandas 的数据框后,我无法在 Python 中的 umap.plot() 上获得颜色标签?

问题描述

我正在尝试生成数据集中三种虹膜的美观图,其中 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)

这是实际绕过整个数据框创建(我真的不想这样做)并直接转到数据集生成绘图的不同方法 - 在我看来,它仍然非常难看,有一些点在浅棕褐色中不显眼,以及强制滚动窗口的巨大再现,但它是交互式的:

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)

在此处输入图像描述

标签: pythonpandasplotvisualization

解决方案


推荐阅读