gpt4 book ai didi

python - 具有按组着色的图例的散点图,无需多次调用 plt.scatter

转载 作者:太空狗 更新时间:2023-10-30 01:26:38 25 4
gpt4 key购买 nike

pyplot.scatter 允许将对应于组的数组传递给 c=,然后根据这些组为点着色。然而,这似乎不支持在没有专门单独绘制每个组的情况下生成图例。

因此,例如,可以通过迭代组并分别绘制每个组来生成带有彩色组的散点图:

import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
feats = load_iris()['data']
target = load_iris()['target']

f, ax = plt.subplots(1)
for i in np.unique(target):
mask = target == i
plt.scatter(feats[mask, 0], feats[mask, 1], label=i)
ax.legend()

生成:

enter image description here

虽然我可以在不遍历每个组的情况下获得类似的图:

f, ax = plt.subplots(1)
ax.scatter(feats[:, 0], feats[:, 1], c=np.array(['C0', 'C1', 'C2'])[target])

但我想不出用第二种策略生成相应图例的方法。我遇到的所有示例都遍历了这些组,这似乎……不太理想。我知道我可以手动生成图例,但这又显得过于繁琐。

最佳答案

解决此问题的 matplotlib 散点图示例也使用循环,因此这可能是预期用途:https://matplotlib.org/examples/lines_bars_and_markers/scatter_with_legend.html

如果您的更大目标只是让分类数据的绘制和标记更加直接,您应该考虑 Seaborn .这是与 Scatter plots in Pandas/Pyplot: How to plot by category 类似的问题

实现您的目标的一种方法是使用带有标签列的 pandas。在 Pandas Dataframe 中拥有数据后,您可以使用 Seaborn pairplot制作这种情节。 (Seaborn 也有 iris 数据集作为标记的 DataFrame 可用)

import seaborn as sns
iris = sns.load_dataset("iris")
sns.pairplot(iris, hue="species")

enter image description here

如果你只想要前两个功能,你可以使用

sns.pairplot(x_vars=['sepal_length'], y_vars=['sepal_width'], data=iris, hue="species", size=5)

enter image description here

如果你真的想使用 sklearn 数据字典,你可以像这样将其拉入数据框:

import pandas as pd
from sklearn.datasets import load_iris
import numpy as np

feats = load_iris()['data'].astype('O')
target = load_iris()['target']
feat_names = load_iris()['feature_names']
target_names = load_iris()['target_names'].astype('O')

sk_df = pd.DataFrame(
np.hstack([feats,target_names[target][:,np.newaxis]]),
columns=feat_names+['target',])
sns.pairplot(sk_df, vars=feat_names, hue="target")

关于python - 具有按组着色的图例的散点图,无需多次调用 plt.scatter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43967663/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com