Matplotlib 直方图或 Seaborn 分布图的箱子上没有轮廓
No outlines on bins of Matplotlib histograms or Seaborn distplots
在使用 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 的最新版本。
作为 matplotlib 2.0 更新的一部分,条形图的边缘 turned off by default。但是,您可以使用 rcParam
plt.rcParams["patch.force_edgecolor"] = True
全局打开边缘。
可能最简单的选择是在创建 seaborn 图时使用 hist_kws
参数专门设置边缘颜色,
ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))
对于 matplotlib 图,您可以直接使用 edgecolor
或 ec
参数。
plt.bar(x,y, edgecolor="k")
plt.hist(x, edgecolor="k")
同样,对于 pandas 地块,
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()
截至 2021 年 3 月:
sns.histplot(data, edgecolor='k', linewidth=2)
工作。
使用 hist_kws=dict(edgecolor="k", linewidth=2)
报错:
AttributeError: 'PolyCollection' object has no property 'hist_kws'
使用 seaborn 中的可用样式也可以解决您的问题。
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 的最新版本。
作为 matplotlib 2.0 更新的一部分,条形图的边缘 turned off by default。但是,您可以使用 rcParam
plt.rcParams["patch.force_edgecolor"] = True
全局打开边缘。
可能最简单的选择是在创建 seaborn 图时使用 hist_kws
参数专门设置边缘颜色,
ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))
对于 matplotlib 图,您可以直接使用 edgecolor
或 ec
参数。
plt.bar(x,y, edgecolor="k")
plt.hist(x, edgecolor="k")
同样,对于 pandas 地块,
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()
截至 2021 年 3 月:
sns.histplot(data, edgecolor='k', linewidth=2)
工作。
使用 hist_kws=dict(edgecolor="k", linewidth=2)
报错:
AttributeError: 'PolyCollection' object has no property 'hist_kws'
使用 seaborn 中的可用样式也可以解决您的问题。 seaborn 中的可用样式是:
- 刻
- 黑暗
- 暗格
- 白色
- 白格