【问题标题】:Adding different colors to points manually in seaborn在seaborn中手动为点添加不同的颜色
【发布时间】:2019-11-11 14:40:08
【问题描述】:

我想手动为点分配颜色。就像点 1 应该有深蓝色,点 2 应该有浅蓝色,点 3 应该有浅蓝色,我如何在 seaborn 中做到这一点。谢谢

import seaborn as sns
import pandas as pd

d = {'OS_Packages':[0,1,2,4], 'Vulnerabilities': [6,7,3,7], 
     'text':['point1','point2','point3','point4']}
df = pd.DataFrame(d)

p1 = sns.relplot(x='OS_Packages', y='Vulnerabilities',data=df )
ax = p1.axes[0,0]
for idx,row in df.iterrows():
    x = row[0]
    y = row[1]
    text = row[2]
    ax.text(x+.05,y,text, horizontalalignment='left')

【问题讨论】:

  • 使用plt.scatter 并通过c 参数设置颜色。

标签: python csv matplotlib seaborn


【解决方案1】:

您从解释中寻求的是一个顺序调色板。

sns.palplot(sns.color_palette("Blues")) 

或者,您可以在 Seaborn 中定义自定义调色板。

flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
sns.palplot(sns.color_palette(flatui))

列表项值必须是您希望具有的十六进制格式的颜色。 在您的数据框中定义一个颜色映射列,将数据点映射到所需的颜色。使用您的客户颜色图作为绘图函数中的参数。

请使用 Seaborn 文档作为参考。

【讨论】:

  • 谢谢,但是我如何将它与 relplot 结合使用
【解决方案2】:

这是一个简单的例子。 sns.relplothue= 参数控制每个项目的颜色。 hue 可以直接控制颜色(如本例所示)或通过间接控制,您需要一个调色板。我添加了legend=False 以防止显示图例,因为hue 这里直接显示颜色。有很多变化是可能的。

import seaborn as sns
import pandas as pd

d = {'OS_Packages':[0,1,2,4], 'Vulnerabilities': [6,7,3,7],
     'text':['point1','point2','point3','point4'],
     'colors': ['red', 'green', 'blue', 'yellow']}
df = pd.DataFrame(d)

p1 = sns.relplot(x='OS_Packages', y='Vulnerabilities',data=df, hue='colors', legend=False )
ax = p1.axes[0,0]
for idx,row in df.iterrows():
    x = row[0]
    y = row[1]
    text = row[2]
    ax.text(x+.05,y,text, horizontalalignment='left')

from matplotlib import pyplot as plt
plt.show()

这是一个示例,其中包含一种类型的调色板和一个图例。

import seaborn as sns
import pandas as pd

d = {'OS_Packages':[0,1,2,4], 'Vulnerabilities': [6,7,3,7],
     'text':['point1','point2','point3','point4'],
     'risk': ['high risk', 'medium risk', 'low risk', 'low risk']}

colors = {'high risk' : '#0000AA', 'medium risk' : '#7777DD', 'low risk' : '#9999FF'}

df = pd.DataFrame(d)

p1 = sns.relplot(x='OS_Packages', y='Vulnerabilities',data=df, hue='risk', palette=colors)
ax = p1.axes[0,0]
for idx,row in df.iterrows():
    x = row[0]
    y = row[1]
    text = row[2]
    ax.text(x+.05,y,text, horizontalalignment='left')

from matplotlib import pyplot as plt
plt.show()

结果:

【讨论】:

  • 他回答你的问题了吗?
猜你喜欢
  • 2023-04-02
  • 2018-06-17
  • 2018-12-15
  • 2018-08-20
  • 2020-11-03
  • 2017-11-02
  • 1970-01-01
  • 2022-11-26
  • 2018-05-04
相关资源
最近更新 更多