【问题标题】:seaborn not coloring bars in barplotseaborn没有在barplot中着色条
【发布时间】:2020-06-27 13:28:28
【问题描述】:

我已经开始写论文了,但我已经遇到了问题。 我正在尝试制作 ca 的条形图。 250 条,但似乎 seaborn 没有显示大多数条的颜色。我认为它可以在调色板中循环 - 但它只是将它们显示为白色。如果我抽取一个较小的样本(我认为最多 99 个),每个条形图都是彩色的。 即使只有一种颜色(不是调色板),也会显示白条。

有人可以帮我解决这个问题吗? 这是代码和图表:

谢谢!

【问题讨论】:

    标签: python plot bar-chart data-visualization seaborn


    【解决方案1】:

    这是一段测试seaborn调色板的代码:

    import numpy as np
    import matplotlib
    import matplotlib.pyplot as plt
    import seaborn as sb
    
    print("Seaborn version : {0}".format(sb.__version__))
    # Seaborn version : 0.10.0
    
    print("Matplotlib version : {0}".format(matplotlib.__version__))
    # Matplotlib version : 3.1.3
    

    只是为了让您知道它适用于这些版本

    # simple color test without palette
    n = 1000
    x = np.arange(1,n+1,1)
    y = np.random.randint(-100,100,n)*np.random.random(n)
    sb.barplot(x,y)
    plt.xticks([])
    plt.show()
    

    # with your color choices
    plt.figure(figsize=(20,20))
    sb.barplot(x,y, palette=sb.color_palette("RdBu",n_colors=7))
    plt.xticks([])
    plt.show()
    

    所以它似乎适用于我的代码数组。

    也许:

    • seaborn 不理解您的数据(检查您的数据框?)

    • 您的 seaborn 或 matplotlib 版本存在错误(尝试 pip install seaborn==0.10.0 和 pip install matplotlib==3.1.3)

    • 您可以尝试其他调色板

    希望这会有所帮助!

    编辑: 感谢@ImportanceOfBeingErnest,我想我理解了你的问题。就是从这个风格来的,评论/取消评论就可以看到结果了

    # sb.set_style("darkgrid")
    

    遗憾的是,我没有找到任何与 darkgrid 样式相关的 kwargs 选项来消除错误...所以我建议我们手动重新创建此样式!

    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    ax.set_facecolor('whitesmoke')
    # background color
    ax.grid(color='white', linestyle='-', linewidth=1)
    # the grid
    sb.barplot(x,y,zorder=2, palette=sb.color_palette("RdBu",n_colors=7))
    #zorder=2 to draw above the grid
    plt.xticks([])
    plt.show()
    

    【讨论】:

    • 要重现 OP 的案例,请使用 sns.set_style("darkgrid")
    • 我尝试更新这两个库,但这并没有解决问题。可能是我的数据集?这是它的一个镜头。 [1]: i.stack.imgur.com/zswKN.png 图表只取第一行和除最后一行之外的所有列。老实说,我不明白为什么会有问题。 (调色板没那么重要,但非常感谢您提供的那段代码!)
    • 您是否尝试删除“样式”行 sb.set_style(...)?也许我的编辑不清楚;这条线所有的条都是白色的。该样式可能会覆盖一些属性,例如条形颜色。
    • 我做到了!即使只是保留 sb.barplot(x,y) 它们也是白色的。
    • 哎哟!如果您有兴趣,我们最终可以绕过 seaborn 并使用精美的 matplotlib 重建图形?
    【解决方案2】:

    我认为这个问题的出现是因为在seaborn 中默认情况下,barplot 中的条形是用细白边界线勾勒出来的。当条本身很薄时,这个白色边界是您唯一看到的东西。尝试将绘图命令更改为:

    g = sb.barplot(x = x, y = y, palette = sb.color_palette("RdBu", n_colors=7), lw=0.)
    

    lw=0. 删除了边界线,然后您应该会看到条形颜色。

    【讨论】:

      猜你喜欢
      • 2020-04-17
      • 2020-10-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2020-01-29
      • 2018-08-01
      • 2021-03-16
      • 2021-09-03
      相关资源
      最近更新 更多