【问题标题】:seaborn ignores custom color palette when number of patches exceeds number of colors当补丁数量超过颜色数量时,seaborn 会忽略自定义调色板
【发布时间】:2019-01-20 19:20:04
【问题描述】:

我设置了一个只包含黑色和灰色的调色板,如下所示。

import seaborn as sns
sns.set_palette(['#000000', '#ABABAB'])

如果我的情节中只有两个或更少的补丁,这很好用。

sns.barplot([1, 2], [3, 4])

但是,当我的条形多于颜色时,seaborn 会切换回默认调色板。

sns.barplot([1, 2, 3], [4, 5, 6]) 

我可以让seaborn 在我的自定义调色板中循环吗?在上面的例子中,第一个条应该是黑色的,第二个是灰色的,第三个是黑色的。

我目前的解决方法是

sns.set_palette(['#000000', '#ABABAB']*1000)

但我怀疑这是执行此操作的标准方法。

【问题讨论】:

    标签: python matplotlib seaborn


    【解决方案1】:

    根据官方文档,这很简单。只需将n_colors 设置为超过调色板中的颜色数量。以下是相关信息(以粗体突出显示)。在这里,您可以将n_colors 设置为一个很大的数字。任何超过 2 的内容都适用于您的情况。

    n_colors : 整数,可选 调色板中的颜色数量。如果None,则默认取决于 关于如何指定palette。命名调色板默认为 6 种颜色, 但是抓住当前的调色板或传入一个颜色列表会 除非指定,否则不要更改颜色数量。 要求 比调色板中存在的颜色多会导致它循环。

    import seaborn as sns
    sns.set_palette(['#000000', '#ABABAB'], n_colors=100)
    
    sns.barplot([1, 2, 3], [4, 5, 6]) 
    

    编辑 似乎必须n_colors 也超过补丁的数量(在这种情况下是条)。因此,如果调色板中有两种颜色和 4 个色块,那么n_colors 也应该大于两者(在这种情况下>4)。

    【讨论】:

    • 很抱歉打扰您。 “要求比调色板中存在的颜色更多的颜色会导致它循环。”对我来说似乎无法正常工作。 sns.set_palette(['#000000', '#ABABAB'], n_colors=3) 后跟 sns.barplot([1,2,3,4], [4,5,6,5]) 给出标准调色板。它适用于n_colors=4。似乎您需要将 n_colors 设置为您期望的补丁数量,但这不是我理解文档的方式。
    • @actual_panda:不,这里的重点是n_colors 应该比调色板中的颜色数量更多。你明白我的意思吗?所以对于sns.barplot([1,2,3,4], [4,5,6,5]),你应该使用大于4的n_colors。所以这里最安全的选择是将n_colors设置为一个非常大的数字。
    • 我们是否使用相同的术语?调色板中有两种颜色 (3 > 2)。图中有四个补丁 (3
    • 好的,我明白了。我认为这个数字必须大于补丁的数量。所以这里最安全的选择是把 n_colors 一些大的数字。我希望现在很清楚。
    • 好的,谢谢。我试过sns.set_palette(colors, n_colors=np.iinfo(np.int64).max),但这个操作永远不会完成。似乎在内部使用了类似于我的解决方法的东西。看起来没有比sns.set_palette(colors, n_colors=10000) 更清洁的解决方案了。
    猜你喜欢
    • 2019-04-07
    • 2018-11-10
    • 1970-01-01
    • 2020-04-28
    • 2020-09-28
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多