为啥 Seaborn 调色板不适用于 Pandas 条形图?
Posted
技术标签:
【中文标题】为啥 Seaborn 调色板不适用于 Pandas 条形图?【英文标题】:Why does the Seaborn color palette not work for Pandas bar plots?为什么 Seaborn 调色板不适用于 Pandas 条形图? 【发布时间】:2016-06-04 19:54:32 【问题描述】:演示代码并显示颜色差异的在线 Jupyter 笔记本位于: https://anaconda.org/walter/pandas_seaborn_color/notebook
当我使用 Pandas 数据框方法制作条形图时,颜色错误。 Seaborn 改进了 matplotlib 的调色板。 matplotlib 中的所有绘图都会自动使用新的 Seaborn 调色板。但是,来自 Pandas 数据帧的条形图会恢复为非 Seaborn 颜色。这种行为并不一致,因为 Pandas 数据框的线图确实使用 Seaborn 颜色。这使我的情节看起来具有不同的风格,即使我的所有情节都使用 Pandas。
如何使用 Pandas 方法进行绘图,同时获得一致的 Seaborn 调色板?
我在 python 2.7.11 中使用 conda 环境运行此代码,其中仅包含此代码所需的包(pandas、matplotlib 和 seaborn)。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
df = pd.DataFrame('y':[5,7,3,8])
# matplotlib figure correctly uses Seaborn color palette
plt.figure()
plt.bar(df.index, df['y'])
plt.show()
# pandas bar plot reverts to default matplotlib color palette
df.plot(kind='bar')
plt.show()
# pandas line plots correctly use seaborn color palette
df.plot()
plt.show()
【问题讨论】:
1. 您的具体问题是什么?您想知道解决方案(和可能的解决方法)还是想知道这种行为的原因? 2. 此信息可能与您的问题有关:pyplot.scatter
也不使用 seaborn 颜色(默认情况下?)。
感谢 kazemakase。我已经编辑了这个问题,以澄清我想知道如何使用 Pandas 方法进行绘图,同时获得一致的 Seaborn 调色板。 (当然,知道原因可能对上述有所帮助。)
【参考方案1】:
感谢@mwaskom 指向sns.color_palette()
。我一直在寻找它,但不知何故我错过了它,因此 prop_cycle
的原始混乱。
作为一种解决方法,您可以手动设置颜色。请注意,如果您要绘制一列或多列,color
关键字参数的行为会有所不同。
df = pd.DataFrame('x': [3, 6, 1, 2], 'y':[5, 7, 3, 8])
df['y'].plot(kind='bar', color=sns.color_palette(n_colors=1))
df.plot(kind='bar', color=sns.color_palette())
我原来的答案:
prop_cycle = plt.rcParams['axes.prop_cycle']
df['y'].plot(kind='bar', color=next(iter(prop_cycle))['color'])
df.plot(kind='bar', color=[x['color'] for x in prop_cycle])
【讨论】:
您可以通过sns.color_palette()
获取当前颜色;没有必要用列表理解来做那件事。【参考方案2】:
这是 pandas 中的一个错误,专门用于条形图(我认为也是箱线图),它已在 pandas master 中修复(请参阅报告的 issue 和 PR 来修复它)。 这将在未来几周发布的 pandas 0.18.0 中。
【讨论】:
Joris,这真的很有帮助,问题链接提供了丰富的信息。我希望我可以选择两个答案,但我选择了 Goyo's,因为它立即有用,并且似乎与该主题相关的长寿潜力更大。谢谢! 我现在也确认了这个答案。我已经安装了 Pandas 开发版本 0.18.0rc1+62.g41b1d25 解决了这个问题。以上是关于为啥 Seaborn 调色板不适用于 Pandas 条形图?的主要内容,如果未能解决你的问题,请参考以下文章