首页 > 解决方案 > 在seaborn中手动为点添加不同的颜色

问题描述

我想手动为点分配颜色。就像点 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')

标签: pythoncsvmatplotlibseaborn

解决方案


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

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()

结果:在此处输入图像描述


推荐阅读