matplotlib 模拟已弃用的海运distplots

eqqqjvef  于 2023-08-06  发布在  其他
关注(0)|答案(2)|浏览(101)

Seborn distplot现在已弃用,并将在未来版本中删除。建议使用histplot(或displot作为图形级别的图)作为替代。但distplothistplot之间的预设不同:

from matplotlib import pyplot as plt
import pandas as pd
import seaborn as sns

x_list = [1, 2, 3, 4, 6, 7, 9, 9, 9, 10]
df = pd.DataFrame({"X": x_list, "Y": range(len(x_list))})

f, (ax_dist, ax_hist) = plt.subplots(2, sharex=True)

sns.distplot(df["X"], ax=ax_dist)
ax_dist.set_title("old distplot")
sns.histplot(data=df, x="X", ax=ax_hist)
ax_hist.set_title("new histplot")

plt.show()

字符串


的数据
那么,我们必须如何配置histplot来复制已弃用的distplot的输出呢?

sc4hvdpw

sc4hvdpw1#

由于我在这方面花了一些时间,我想我分享了这一点,以便其他人可以轻松地适应这种方法:

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

x_list = [1, 2, 3, 4, 6, 7, 9, 9, 9, 10]
df = pd.DataFrame({"X": x_list, "Y": range(len(x_list))})

f, (ax_dist, ax_hist) = plt.subplots(2, sharex=True)

sns.distplot(df["X"], ax=ax_dist)
ax_dist.set_title("old distplot")
_, FD_bins = np.histogram(x_list, bins="fd")
bin_nr = min(len(FD_bins)-1, 50)
sns.histplot(data=df, x="X", ax=ax_hist, bins=bin_nr, stat="density", alpha=0.4, kde=True, kde_kws={"cut": 3})
ax_hist.set_title("new histplot")

plt.show()

字符串
样品输出:
x1c 0d1x的数据
主要变化是

  • bins=bin_nr-使用Freedman Diaconis Estimator确定直方图箱,并将上限限制为50
  • stat="density"-在直方图中显示密度而不是计数
  • alpha=0.4-用于相同的透明度
  • kde=True-添加核密度图
  • kde_kws={"cut": 3}-将核密度图扩展到直方图极限之外

关于bins="fd"的bin估计,我不确定这确实是distplot使用的方法。评论和更正是非常欢迎的。
我删除了**{"linewidth": 0},因为正如@mwaskom在评论中指出的那样,distplot在直方图条周围有一条edgecolor线,可以由matplotlib设置为默认的facecolor。所以,你必须根据你的风格偏好来整理这个。

clj7thdc

clj7thdc2#

#使用histplot()#histplot用于单变量

import seaborn as sns import matplotlib.pyplot as plt
fig = sns.FacetGrid(data = data,col = 'variable name',hue = 'variable name',heigth = 9,palette = 'Set1')
fig = fig.map(sns.histplot,variable name,kde = True).add_legend()

相关问题