当前位置: 首页 > 知识库问答 >
问题:

Seaborn散点图的“色调”颜色不正确

姜育
2023-03-14

我在给散点图标记着色时遇到了一些麻烦。我有一个简单的数据框,其中有一个值“pos”和另外两个值“af_min”和“af_max”。我想根据af_x和af_y的一些条件给标记上色,但是因为我没有任何列可以用作色调,所以我创建了自己的列“color”。

       pos      af_x      af_y  color 
0  3671023  0.200000  0.333333    2.0
1  4492071  0.176471  0.333333    2.0
2  4492302  0.222222  0.285714    2.0
3  4525905  0.298246  0.234043    2.0
4  4520905  0.003334  0.234043    1.0
5  4520905  0.400098  0.000221    0.0
6  4520905  0.001134  0.714043    1.0
7  4520905  0.559008  0.010221    0.0

现在,我创建了一个散点图,使用海运和海运调色板的方式:

sns。散点图(data=df,x=“af_x”,y=“af_y”,hue=“color”,palete=“hsv”,s=40,legend=False)

           #violet      #green      #orange
 colors = ['#747FE3', '#8EE35D', '#E37346']
 sns.set_palette(sns.color_palette(colors))

 sns.scatterplot(data = df,  x="af_x", y="af_y", hue="color", s=40, legend=False)

在这里,我放置了整个脚本,以便您可以复制它:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns

lst = [[3671023, 0.200000, 0.333333], [4492071, 0.176471, 0.333333],
      [4492302, 0.222222, 0.285714], [4525905, 0.298246, 0.234043],
      [4520905, 0.003334, 0.234043], [4520905, 0.400098, 0.000221], 
      [4520905, 0.001134, 0.714043], [4520905, 0.559008, 0.010221]
      ]
df = pd.DataFrame(lst, columns =['pos', 'af_x', 'af_y'])

afMin=0.1
afMax=0.9

df['color']=np.nan
for index in df.index:
  afx=df.loc[index, "af_x"]
  afy=df.loc[index, "af_y"]
  if ((afx >= afMin and afx <= afMax) and (afy < afMin or afy > afMax)):
      df.loc[index, "color"] = 0
  elif ((afy >= afMin and afy <= afMax) and (afx < afMin or afx > afMax)):
      df.loc[index, "color"] = 1
  elif ((afy >= afMin and afy <= afMax) and (afx >= afMin or afx <= afMax)):
      df.loc[index, "color"] = 2

sns.scatterplot(data = df,  x="af_x", y="af_y", hue="color", palette = "hsv", s=40, 
legend=False)

plt.savefig("stack_why_hsv.png")

           #violet      #green      #orange
colors = ['#747FE3', '#8EE35D', '#E37346']
sns.set_palette(sns.color_palette(colors))

sns.scatterplot(data = df,  x="af_x", y="af_y", hue="color", s=40, legend=False)
plt.savefig("stack_why_personal.png")

感谢所有能帮忙的人!

共有1个答案

关飞翔
2023-03-14

第一个示例的问题是,hsv调色板在开始和结束时具有相同的颜色。这是因为“hsv”中的“h”是一个循环变量,从0到360度。Matplotlib默认使用3种颜色,在颜色范围内均匀分布,因此从开始使用红色,从中心使用青色,再从结束使用红色。因此,在这种情况下,hsv不是最合适的配色方案。请参见matplotlib的可用颜色贴图和seaborn的扩展。

对于第二个示例,sns。set_palette()设置matplotlib的颜色循环,但seaborn本身并不总是使用它。当给定数字色调时,seaborn default默认选择rocketcolormap。从文件中:

色调(以及较小程度上的大小)语义的默认处理方式(如果存在)取决于是否推断变量来表示“数字”或“分类”数据。特别是,默认情况下,数字变量用顺序颜色映射表示,图例条目显示规则的“记号”,其值可能存在于数据中,也可能不存在于数据中。

使用自定义调色板的最简单方法是直接将其提供给函数(无需调用sns.color\u palete(),因为seaborn调色板内部只是颜色列表):

colors = ['#747FE3', '#8EE35D', '#E37346']
sns.scatterplot(data = df,  x="af_x", y="af_y", hue="color", palette=colors, s=40)

PS:set\u调色板在色调分类时由scatterplot使用。这里有一个例子。我还添加了为选定行设置值的首选方法;这对于大型数据帧非常重要。请注意,数组上的布尔运算需要相当多的括号。

afMin = 0.1
afMax = 0.9

df['color'] = ""
afx = df["af_x"]
afy = df["af_y"]
df.loc[((afx >= afMin) & (afx <= afMax) & ((afy < afMin) | (afy > afMax))), "color"] = "a"
df.loc[((afy >= afMin) & (afy <= afMax) & ((afx < afMin) | (afx > afMax))), "color"] = "b"
df.loc[((afy >= afMin) & (afy <= afMax) & (afx >= afMin) & (afx <= afMax)), "color"] = "c"

colors = ['#747FE3', '#8EE35D', '#E37346']
sns.set_palette(sns.color_palette(colors))

sns.scatterplot(data=df, x="af_x", y="af_y", hue="color", s=40)
 类似资料:
  • 我很难让海运色调按价值着色。我的数据是在一个熊猫df和我使用的barplod。

  • 我有一个带符号值的pyplot极坐标散点图。Pyplot做了“正确”的事情,只创建一个正轴,然后反射负值,使其看起来像180度以外的正值。 但是,默认情况下,pyplot使用相同的颜色打印所有点。所以正负值是无法区分的。 我想很容易区分角度x的正值和角度(x/-180)的负值,正值为红色,负值为蓝色。 我在为这种情况创建一个非常简单的彩色地图方面没有取得任何进展。 帮助

  • 我试图弄清楚如何动态设置数据点的edgecolor。可以使用c=[array of numeric labels]设置facecolor,但对于EdgeColor则不是这样。 我试图实现的是一个图,其中facecolor等于实例算法的预测标签,edgecolor等于该实例的真实标签。这样,我可以直观地比较结果(对于进一步的工作很重要)。 有什么建议吗?这是我目前的代码: 这给了我以下的情节 我感谢

  • 颜色在可视化中起着比任何其他方面更重要的作用。 有效使用时,颜色为绘图增加了更多价值。 调色板是指平面,画家在其上排列和混合涂料。 建筑调色板 Seaborn提供了一个名为color_palette()的函数,可用于为图表添加颜色并为其添加更多美学价值。 用法 (Usage) seaborn.color_palette(palette = None, n_colors = None, desat

  • 我试图从seaborn文档中创建一个这样的图形,但是条纹图的边缘颜色由色调决定。这是我的尝试: 但是男性和女性的调色板似乎是不同的。如何为两个类别使用相同的调色板? 我用海运0.6.dev

  • 我创建了以下3d散点图,使用在R.为此,我使用了以下代码data setTxy,只包含每个标记的x,y,z坐标和每个坐标点的0-1.5之间的值(在名为vectorM的列中) 我以为我把所有的颜色都改成了灰色,但情节里还是有颜色。我怎样才能改变这个?进一步:-为什么缩放不是灰色的;我怎样才能创造这个呢-我如何在右边的刻度上勾勒出“因子”-为什么我有“跟踪0”和“跟踪1”? 我如何在这个图中画两个圆,