matplotlib 如何为直方图添加边缘颜色

nmpmafwu  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(173)

当我使用seaborn和一个xmlyter 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。

vecaoik1

vecaoik11#

  • 作为matplotlib 2.0更新的一部分,条形图上的边默认是关闭的。但是,这个行为可以通过rcParams全局更改。
  • plt.rcParams["patch.force_edgecolor"] = True
  • 或者,在plot调用中设置edgecolor/ec参数,并可能增加linewidth/lw参数。
    *python 3.11.4pandas 2.0.3matplotlib 3.7.1seaborn 0.12.2中测试

导入和样本数据

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

np.random.seed(2023)  # ensures the data is repeatable
x = np.random.randn(100)
df = pd.DataFrame(data=x, columns=['values'])

# precalculate the histogram values to plot a bar plot
counts, bins = np.histogram(x)

Pandas

ax = df.plot(kind='hist', ec='k')

matplotlib

.hist

plt.hist(x, ec="k")

.bar

fig, ax = plt.subplots()
ax.bar(x=range(len(counts)), height=counts, width=1, ec='k')

# sets the bin values at the bar edges
_ = ax.set_xticks(ticks=np.arange(0, len(bins)) - 0.5, labels=bins.round(2))

海运

  • matplotlib的高级API。
  • 图形级函数与轴级函数
  • ec='k'是默认设置。但是,ec可以用于设置不同的颜色或None

.histplot

  • 一个axes级函数。
ax = sns.histplot(data=df, x='values')

.displot

  • 一个图形级函数。
g = sns.displot(data=df, kind='hist', x='values')

.distplot

  • histplotdisplot取代。
  • 在创建distplot时使用hist_kws参数设置边缘颜色。
ax = sns.distplot(x, hist_kws=dict(edgecolor="k", linewidth=2))

示例图

pu82cl6c

pu82cl6c2#

截至2021年3月:

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

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

相关问题