【问题标题】:Removing legend from seaborn barplot but keeping custom color从 seaborn barplot 中删除图例但保留自定义颜色
【发布时间】:2020-12-26 05:39:10
【问题描述】:

我正在尝试根据 df 中的一列创建具有自定义颜色的条形图。但是我不想显示图例。一旦我尝试删除图例颜色就会恢复默认值。

这是我的代码。

b = sns.barplot(x="game_week", y="shots", data=data, hue="color")
b.tick_params(labelsize=5)
b.legend_.remove()
b.set(ylim=(0, np.nanmax(df[cols])))

有什么想法吗? sns.barplot 甚至可以吗?

【问题讨论】:

  • 运行一些虚拟代码,看来我在有或没有图例的情况下得到相同的颜色?我正在运行 sns 0.9.1 和 matplotlib 3.0.3。我确实省略了b.set() 行。也许看看这有什么作用?
  • 没有帮助。您是从 data.frame 中获得色调还是对其进行硬编码?
  • 我使用了与您完全相同的行:b = sns.barplot(x="game_week", y="shots", data=data, hue="color")
  • all code, replace \n: import seaborn as sns\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport matplotlib\ndata = pd.DataFrame(np.random.randint(0, 10,size=(100, 3)), columns=['game_week', 'shots', 'color'])\nb = sns.barplot(x="game_week", y="shots", data=data, hue="color")\nb.tick_params(labelsize=5)\nb.legend_.remove()\nplt.figure()\nc = sns.barplot(x="game_week", y="shots", data=数据,hue="color")\nc.tick_params(labelsize=5)\nplt.show()\nprint(sns.__version__)\nprint(matplotlib.__version__)
  • 在绘图前用b.set(ylim=(0, np.nanmax(data["shots"]))) 运行它。我得到一个没有图例和自定义最大值的彩色条形图

标签: python seaborn


【解决方案1】:

您可以像这样使用seaborn.color_palette 设置调色板:

palette = sns.color_palette('hls', len(data.color.unique())

g = sns.barplot(
    x="game_week", 
    y="shots", 
    data=data, 
    hue="color",
    palette=palette
)
g.legend_.remove()

通过这种方式设置调色板,您将获得与数据框的color 列中的类别数量相对应的颜色数量,这也是色盲友好

【讨论】:

    猜你喜欢
    • 2020-07-29
    • 2020-09-28
    • 2020-10-21
    • 2018-03-01
    • 2022-01-06
    • 1970-01-01
    • 2020-06-21
    • 2020-03-30
    • 2019-03-17
    相关资源
    最近更新 更多