python 绘图sns.distplot

25 篇文章 2 订阅

0.语法

seaborn.distplot(a=None, bins=None, hist=True, kde=True, rug=False, fit=None, hist_kws=None, kde_kws=None, rug_kws=None, fit_kws=None, color=None, vertical=False, norm_hist=False, axlabel=None, label=None, ax=None, x=None)

sns.distplot:直方图(hist)+内核密度函数(kde)

关键参数
norm_hist:若为True, 则直方图高度显示密度而非计数(含有kde图像中默认为True)。
当kde与norm_hist皆为Fasle时,它的plot与matplotlib.pyplot.hist是一模一样的。表现频次。
rug=True,绘制变量分布情况。

1.sns.distplot修改核密度曲线属性

g=sns.distplot(x,
               hist=True,
               kde=True,#开启核密度曲线kernel density estimate (KDE)
               kde_kws={'linestyle':'--','linewidth':'1','color':'#c72e29',#设置外框线属性                                               
                       },
               color='#098154',
               axlabel='Xlabel',#设置x轴标题
              )

2.核密度函数Kernel Density Estimation(KDE)
https://blog.csdn.net/weixin_39910711/article/details/107307509

  • 核密度估计(kernel density estimation)是在概率论中用来估计未知的密度函数,属于非参数检验方法之一。
  • 反映出离散测量值在连续区域内的分布情况。
  • 密度估计最简单的非参数技术是直方图。
  • sns.distplot:y轴表示密度,每个直方图的面积代表概率。
    https://www.cnblogs.com/tangjianwei/p/13753633.html
  • 绘制KDE图比绘制直方图要复杂得多,每个观测值首先要以该值为中心的正(高斯)曲线代替。然后各个点在加起来,计算支持网格点中每个点的密度值,然后将得到的曲线归一化,使其面积小于1,即得到核密度估计图.

3.绘图输出希腊字母
希腊字母表:http://www.fhdq.net/yy/76.html

希腊字母
在这里插入图片描述

图片来源:https://www.cnblogs.com/gegemu/p/11459167.html

----小写-------- ------大写------
α \alpha Α
β \beta Β
γ \gamma Γ \Gamma
δ \delta Δ \Delta
ε \epsilon Ε
ζ \zeta Ζ
η \eta Η
θ \theta Θ \Theta
ι \iota Ι
κ \kappa Κ
λ \lambda Λ \Lambda
μ \mu Μ
ν \nu Ν
ξ \xi Ξ \Xi
ο \o Ο
π \pi Π \Pi
ρ \rho Ρ
σ \sigma Σ \Sigma
τ \tau Τ
υ \upsilon Υ \Upsilon
φ \phi Φ \Phi
χ \chi Χ
ψ \psi Ψ \Psi
ω \omega Ω \Omega
----------------数学符号-----------------
± \pm 上标 a^b
× \times 下标 a_b
÷ \div
≥ \geq
≤ \leq
正负 \pm 左箭头 \leftarrow 右箭头 \rightarrow 上箭头 \uparrow

python支持LaTex语法,输入格式为:r’$ \Delta $’ #其中的Delta对应于希腊字母的Δ

r'$\Delta$Height(m)' #对应于ΔHeight(m)

输出用到字符串格式化

%o:oct 八进制
%d:dec 十进制
%x:hex 十六进制
%f:浮点数 print("浮点数:%f,%f " % (1, 22.22))
%.2f :保留2位小数
%05.2f :保留2位小数,宽5位(包括小数点),不足补0
%s:字符串输出
%5s:字符串不足5位,左边补空格
%-5s:字符串不足5位,右边补空格

具体用法:

sns.kdeplot(x, label=r'$\mu$ = %.2f,$\sigma$ = %.2f'%(var_mean,var_std))

4.利用plot绘制 直方图+核密度曲线图
https://www.statsmodels.org/stable/examples/notebooks/generated/kernel_density.html
代码:

df = pd.read_excel('./1.xlsx')
x = df['variable']
var_mean = x.mean()
var_std = x.std()

kde = sm.nonparametric.KDEUnivariate(x)
kde.fit()  # Estimate the densities

fig = plt.figure(figsize=(12/2.54,10/2.54))
ax = fig.add_subplot(111)

# Plot the histrogram
ax.hist(
    x,
    bins=20,
    label="Histogram ",
    zorder=5,
    edgecolor="k",
    density=True,
    alpha=0.5,
)

# Plot the KDE for various bandwidths
# for bandwidth in [0.1, 0.2, 0.4]:
#     kde.fit(bw=bandwidth)  # Estimate the densities
#     ax.plot(
#         kde.support,
#         kde.density,
#         "--",
#         lw=2,
#         color="k",
#         zorder=10,
#         label="KDE from samples, bw = {}".format(round(bandwidth, 2)),
#     )

ax.legend(loc="best")

5.在图中显示核密度函数的label

g = sns.distplot(x,
                 bins=20,
                 kde = False,
                 norm_hist=True,#If True, the histogram height shows a density rather than a count
                 # fit = norm, 
                 # color='b',
                 # rug=True,
                 label = 'mean')
plt.legend()

显示的为直方图的label,要想显示核密度函数的label,这里我利用sns.kdeplot(x, label="u"),重新绘制核密度函数。其实是sns.distplot调用了sns.kdeplot这个函数。

sns.kdeplot函数语法:

seaborn.kdeplot(data, data2=None, shade=False, vertical=False, kernel=’gau’, bw=’scott’, gridsize=100, cut=3, clip=None, legend=True, cumulative=False, shade_lowest=True, cbar=False, cbar_ax=None, cbar_kws=None, ax=None, **kwargs)

sns.kdeplot函数参数:

  • kernel:默认高斯内核。kernel:{‘gau’ | ‘cos’ | ‘biw’ | ‘epa’ | ‘tri’ | ‘triw’ },可选参数

  • bw:{‘scott’ | ‘silverman’ | scalar | pair of scalars },可选参数,用于确定双变量图的每个维的核大小、标量因子或标量的参考方法的名称。

6.完整代码:

#test
df = pd.read_excel('./1.xlsx')
x = df['var']
var_mean = x.mean()
var_std = x.std()
plt.figure(figsize=(12/2.54,10/2.54))
g = sns.distplot(x,
                 bins=20,
                 kde = False,
                 norm_hist=True,#If True, the histogram height shows a density rather than a count
                 # fit = norm, 
                 # color='b',
                 # rug=True,
                 # label = 'mean',
                 axlabel = r'$\Delta$ var (m)' )
sns.kdeplot(x, label=r'$\mu$ = %.2f,$\sigma$ = %.2f'%(var_mean,var_std),color = 'k')
plt.ylabel('Density')                 
# plt.axvline(ice_mean)
plt.legend()
plt.show()
# plt.savefig("cdf.png", bbox_inches = "tight",dpi = 300)

在这里插入图片描述
更新:
直方图和密度函数都有图例:

x=[10,20,30,50,40,20]
fig = plt.figure(figsize=(10,6))
sns.distplot(x,kde_kws={"label":"KDE"},axlabel='123',label='321')
plt.legend()

在这里插入图片描述

  • 21
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
sns.distplot()是seaborn库中用于绘制直方图和核密度估计图的函数。它可以接受多个参数来调节图形的显示效果。以下是对一些常用参数的说明: - x:要绘制的数据,可以是一维数组、Series或DataFrame的列。 - hist:是否显示直方图,默认为True。可以设置为False来隐藏直方图。 - kde:是否显示核密度估计,默认为True。可以设置为False来隐藏核密度估计曲线。 - rug:是否显示数据点,默认为False。可以设置为True来在x轴上显示数据点的分布情况。 - bins:直方图的箱子数量,默认为自动选择。可以设置为整数来指定箱子的数量。 - hist_kws:直方图的参数设置,可以传递一个字典来设置直方图的颜色、边框等属性。 - kde_kws:核密度估计曲线的参数设置,可以传递一个字典来设置曲线的颜色、线型等属性。 - rug_kws:数据点的参数设置,可以传递一个字典来设置数据点的颜色、大小等属性。 通过调节这些参数,可以根据需要来绘制不同样式的直方图和核密度估计图。\[2\]\[3\] #### 引用[.reference_title] - *1* [可视化--Seaborn](https://blog.csdn.net/qq_18668137/article/details/88942338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [sns.distplot()](https://blog.csdn.net/weixin_55000908/article/details/127093668)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值