没有关于Matplotlib直方图或Seaborn distplots的箱子的轮廓

时间:2017-03-28 21:26:54

标签: python python-3.x matplotlib seaborn

在使用seaborn和Jupyter笔记本做一些练习问题的同时,我意识到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)

产生了以下图表:

enter image description here

最后,我偶然发现了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。

3 个答案:

答案 0 :(得分:47)

作为matplotlib 2.0更新的一部分,条形图上的边缘为turned off by default。但是,您可以使用rcParam

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

全局转动边缘。

可能最简单的选择是在创建seaborn图时专门设置edgecolor,使用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()

enter image description here

答案 1 :(得分:3)

截至 2021 年 3 月:

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

工作。 使用 hist_kws=dict(edgecolor="k", linewidth=2) 出现错误:
AttributeError: 'PolyCollection' object has no property 'hist_kws'

答案 2 :(得分:0)

使用 seaborn 中的可用样式也可以解决您的问题。 seaborn 中可用的样式有:

  1. 滴答声
  2. 黑暗
  3. 暗格
  4. 白色
  5. 白格