我想用一些 rgb 值给散点图中的点着色。
使用原始 API,这很简单:
import seaborn as sns
x = [0, 1, 2]
y = [0, 0, 0]
colors = [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
sns.scatterplot(x=x, y=y, c=colors)
我得到一个红点、一个绿点和一个蓝点。
但是如何使用对象 api 来做到这一点呢?
import seaborn.objects as so
so.Plot(x=x, y=y).add(so.Dot()).scale(color=colors)
这不起作用。根据您放置 color
参数的位置,您会收到不同的错误消息。
编辑: 最终结果看起来像这样。一些 3d 坐标表示为 rgb 值。
使用十六进制颜色的解决方案效果很好
hex_colors = [mpl.colors.rgb2hex(c) for c in colors]
so.Plot(x=x, y=y, color=hex_colors).add(so.Dot()).scale(color=None)
只有 Vscode 告诉我类型不兼容:
“list[str]”类型的参数不能分配给函数“__init__”中“VariableSpec”类型的参数“color”
“None”类型的参数不能分配给函数“scale”中“Scale”类型的参数“color”
最佳答案
我假设您希望颜色映射到 x 位置
so.Plot(x=x, y=y, color=x).add(so.Dot(), legend=None).scale(color=colors)
您还可以使用身份等级:
so.Plot(x=x, y=y, color=colors).add(so.Dot()).scale(color=None)
但是变量被记录为采用向量参数,而不是矩阵,所以我不确定我是否希望这在未来始终有效。使用十六进制值可能更可靠:
hex_colors = [mpl.colors.rgb2hex(c) for c in colors]
so.Plot(x=x, y=y, color=hex_colors).add(so.Dot()).scale(color=None)
关于python - 如何在seaborn对象api中定义带有rgb值的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75666897/