python - 为什么在将 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)
解决方案
推荐阅读
- windbg - WinDbg 显示中缺少标识符名称
- python - 从数据库中的数据填充下拉列表 - Django
- notifications - fail2ban 测试发送电子邮件
- javascript - 使用 vanilla JS 显示 Html 表单数据
- c# - SkiaSharp 切出路径
- python - Python按相对于列的最低值合并
- python - 使用正则表达式 python 删除空格
- python - 在 Azure 中部署 Dash 应用程序,仍在加载中
- java - 搜索二叉搜索树 (BST) 的最佳算法
- c# - 应用程序生命周期和在 ASP.NET Core 中添加单例 DI 服务