Matplotlib 直方图或 Seaborn 分布图的箱子上没有轮廓

新手上路,请多包涵

在使用 seaborn 和 Jupyter notebook 做一些练习题时,我意识到 distplot() 图在单个 bin 上没有文档中所有示例图所具有的较暗轮廓。我尝试使用 Pycharm 创建图表并注意到同样的事情。认为这是一个 seaborn 问题,我使用 matplotlib 尝试了一些 hist() 图表,只是为了得到相同的结果。

 import matplotlib.pyplot as plt
import seaborn as sns
titanic = sns.load_dataset('titanic')
plt.hist(titanic['fare'], bins=30)

产生了下图:

在此处输入图像描述

最后,我偶然发现了 plt.hist() 函数上的“edgecolor”参数,并将其设置为黑色就可以了。不幸的是,我还没有找到可用于 seaborn distplot() 函数的类似参数,因此我仍然无法获得看起来应该如此的图表。

我考虑过更改 matplotlib 中的 rcParams,但我没有这方面的经验,我运行的以下脚本似乎什么也没做:

 import matplotlib as mpl

mpl.rcParams['lines.linewidth'] = 1
mpl.rcParams['lines.color'] = 'black'
mpl.rcParams['patch.linewidth'] = 1
mpl.rcParams['patch.edgecolor'] = 'black'
mpl.rcParams['axes.linewidth'] = 1
mpl.rcParams['axes.edgecolor'] = 'black'

我只是在猜测我应该更改的值,但再次运行我的图表显示没有任何变化。

然后我尝试使用 mpl.rcdefaults() 返回默认设置,但再一次没有改变。

我使用 conda 重新安装了 matplotlib,但图表看起来仍然一样。关于如何更改这些图表的默认边缘颜色,我的想法已经用完了。我正在使用 Conda 构建运行最新版本的 Python、matplotlib 和 seaborn。

原文由 Colin Lindley 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

作为 matplotlib 2.0 更新的一部分,条形图上的边缘 默认关闭。但是,您可以使用 rcParam

 plt.rcParams["patch.force_edgecolor"] = True

全局打开边缘。

可能最简单的选择是在创建 seaborn 图时专门设置边缘颜色,使用 hist_kws 参数,

 ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))

对于 matplotlib 图,您可以直接使用 edgecolorec 参数。

 plt.bar(x,y, edgecolor="k")
plt.hist(x, edgecolor="k")

同样,对于熊猫地块,

 df.plot(kind='hist',edgecolor="k")

一个完整的 seaborn 示例:

 import  numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

x = np.random.randn(100)
ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))
plt.show()

在此处输入图像描述

原文由 ImportanceOfBeingErnest 发布,翻译遵循 CC BY-SA 4.0 许可协议

截至 2021 年 3 月:

 sns.histplot(data, edgecolor='k', linewidth=2)

工作。使用 hist_kws=dict(edgecolor="k", linewidth=2) 出现错误:

AttributeError: 'PolyCollection' object has no property 'hist_kws'

原文由 rahul-ahuja 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题