在Python中创建彩色散点图

2024-09-27 00:19:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个熊猫数据框,其中有我想绘制的数据,但我想根据动物的性别改变点的颜色。我尝试了很多不同的方法来实现这个目标。首先,我试图根据df列“Sex”索引字典

figure = plt.figure(figsize=(20, 6))
axes = figure.add_subplot(1, 2, 1)
clr = {'M':'firebrick','F':'blueviolet', 'I':'beige'}
axes.scatter( data[ "Whole Weight"], data['Shucked Weight'],color=clr[str(data['Sex'])])
axes.set_ylabel( "Shucked Weight")
axes.set_xlabel( "Whole Weight")
axes.set_title("Whole Weight vs. Shucked Weight")

plt.show()
plt.close()

这给了我一堆关键错误。接下来,我尝试遍历df并根据行值手动添加列:

^{pr2}$

我试着从头开始做一本字典,里面有价值:

weight_dict = pd.DataFrame(dict(whole = data['Whole Weight'], shucked = data['Shucked Weight'], sex = data['Sex'], color= some if statement that choked))

我试着用np.哪里声明,但我有3种性别选择(男性、女性和婴儿,缩写为M、F、I)

data['color'] = np.where(data.Sex == 'M', 'Firebrick', (data.Sex == 'F', 'blueviolet','beige'))

最后我得到了这样的结果:

def label_color(row):
    if row['Sex'] == 'M':
        return 'firebrick'
    elif row['Sex'] == 'F':
        return 'blueviolet'
    else:
        return 'beige'
data['color'] = data.apply(lambda row: label_color(row), axis=1)

但我对解决方案并不十分满意。我真的很希望第一个解决方案能在我有一个自定义词典并在调用轴.散点,但这些错误是奇怪的,不可理解。在

有没有更简单的方法来解决这种疯狂?在


Tags: 数据datareturnpltcolorrowfigureweight
1条回答
网友
1楼 · 发布于 2024-09-27 00:19:30

我想你第一次尝试的时候几乎就对了。在

我会把字典应用到一个新的专栏,把性别和颜色联系起来。有点像

df = pd.DataFrame(columns=["ww", "sw", "sex"])
df["ww"] = np.random.randn(500)
df["sw"] = np.random.randn(500)
df["sex"] = np.random.choice(["M", "F", "I"], size=500)

clr = {'M':'firebrick','F':'blueviolet', 'I':'yellow'}
df["color"] = df["sex"].apply(lambda x: clr[x])

plt.scatter(df["ww"], df["sw"], color=df["color"], alpha=0.7)

enter image description here

或者,如果你不想要一个新的列,或者字典在分散调用之间改变,你可以这样做

^{pr2}$

不确定是否有更好的解决方案只使用字典,但考虑到你已经有你的数据在熊猫,我认为使用它是好的。在

相关问题 更多 >

    热门问题