matplotlib 如何更改kdeot或散点图中变量的颜色

7gyucuyw  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(251)

根据不同月份表示鱼位置的 Dataframe :

X      Y      Month
2040   2760    1
2041   2580    1 
2045   2762    1 
2047   2763    2
2053   2774    3

通过这段海上文字

fig,ax=plt.subplots()
kde = sns.kdeplot(data=HR25, x='X', y='Y', shade=True, ax=ax, levels=levels_, cmap="Reds", 
alpha=0.9)
ax.set_xlim([x_min-10, x_max+10])
ax.set_ylim([y_min-10, y_max+10])
ax.scatter(X, Y, c=months, edgecolors='black', picker=True, s=17)
ax.set_aspect('equal')
plt.show()

我已经能够创建这个数字,它代表了鱼在一年中按月份的位置(背景中的红色区域是用内核海运方法计算的动物的家范围):

实际上,我想改变与月份相关的点的颜色,所以我创建了一个不同的调色板,为每个月份指定颜色:

palette = {1:"tab:blue", 2:"tab:orange", 3:"tab:purple", 4:"tab:green", 5:"tab:red", 6:"tab:pink", 7:"tab:brown", 8:"tab:yellow", 9:"tab:olive", 10:"tab:black", 11:"tab:cyan", 12:"tab:gray"}

但是,当我像这样将调色板添加到ax.scatter中时:

fig,ax=plt.subplots()
    kde = sns.kdeplot(data=HR25, x='X', y='Y', shade=True, ax=ax, levels=levels_, cmap="Reds", 
    alpha=0.9)
    ax.set_xlim([x_min-10, x_max+10])
    ax.set_ylim([y_min-10, y_max+10])
    ax.scatter(X, Y, c=months, edgecolors='black', picker=True, s=17, palette=palette)
    ax.set_aspect('equal')
    plt.show()

所有点消失!

42fyovps

42fyovps1#

在本例中,当调用ax.scatter时,实际上并没有使用Seaborn scatterplot函数,而是使用了Matplotlib scatter函数,该函数没有palettepicker关键字参数,而不是:

ax.scatter(X, Y, c=months, edgecolors='black', picker=True, s=17, palette=palette)

尝试:

sns.scatterplot(X, Y, c=months, edgecolors='black', picker=True, s=17, palette=palette, ax=ax)

注意tab:yellowtab:black不在Matplotlib的Tableau调色板中,因此您应该删除这些值的字符串中的tab:

如果您确实想使用Matplotlib的scatter,您可以通过在rcParams中设置'axes.prop_cycle'来设置颜色,例如:

import matplotlib as mpl
from cycler import cycler

mpl.rcParams['axes.prop_cycle'] = cycler(
    color=list(palette.values())
)

相关问题