【发布时间】:2021-08-10 17:42:16
【问题描述】:
我在为散点图标记着色时遇到了一些问题。我有一个简单的数据框,其值为“pos”和另外两个值“af_min”和“af_max”。我想根据 af_x 和 af_y 的某些条件为标记着色,但由于我没有任何列可用作色调,因此我创建了自己的列“颜色”。
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
现在,我以这种方式使用 seaborn 和 seaborn 调色板创建散点图:
sns.scatterplot(data = df, x="af_x", y="af_y", hue="color", palette = "hsv", s=40, legend=False)
但结果如下:如您所见,一种色调不会着色,因为只有蓝色和红色两种颜色。 .
现在发生了一件非常奇怪的事情:为了解决这个问题,我构建了自己的调色板广告,并将其添加到 seaborn istance。但是散点图不是用我选择的阴影着色,而是用我前一段时间在另一个脚本中使用的一些颜色着色,并且无法更改它们。这里的情节: 这是代码:
#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")
感谢任何可以提供帮助的人!
【问题讨论】:
标签: python matplotlib seaborn hue scatter