繁体   English   中英

来自 x 和 y 数据的密度分布和条形图

[英]density distribution and bar plot from x and y data

我在熊猫数据框中有以下数据集:

x = df_data.iloc[:,0].values
y = df_data.iloc[:,1].values

以下数据分别在 x 和 y 中:

x = 30, 31, 32, 33, 34, 35, 36
y = 1000, 2000, 3000, 4000, 3000, 2000, 1000

y 表示计数(每个 x 值存在的频率)。

我现在想用密度分布线绘制条形图。 我愿意使用 seaborn 或 matplotlib,但找不到分别输入 x 和 y 数据并获得条形图和密度图的方法。

我试过这个:

x = [30,31,32,33,34,35,36]
y = [1000, 2000, 3000, 4000, 3000, 2000, 1000]
##
sns.distplot(x, hist=True, kde=True,
    bins=int(150/150), color='darkblue',
    hist_kws={'edgecolor':'black'},
    kde_kws={'linewidth': 4})
plt.show()

但没有得到我想要的。

我想要像下面这样的东西(仅用于我的数据)

在此处输入图片说明

(我从: https : //towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0得到这张图片)

首先,请注意distplot已在 Seaborn 0.11 中折旧。 扩展和改进版本现在称为histplot (带有可选 kde 的直方图)、 kdeplot (仅用于 kde)和displot (创建子图)。

可选的weights=参数为每个x值设置权重。 需要discrete=True为每个x值有一个条形。 kde 的cut参数控制曲线在数据点外绘制的距离。

import matplotlib.pyplot as plt
import seaborn as sns

x = [30, 31, 32, 33, 34, 35, 36]
y = [1000, 2000, 3000, 4000, 3000, 2000, 1000]

sns.histplot(x=x, weights=y, discrete=True,
             color='darkblue', edgecolor='black',
             kde=True, kde_kws={'cut': 2}, line_kws={'linewidth': 4})
plt.show()

带权重的直方图

请注意,如果基础数据是连续的,您将通过提供原始数据获得更正确的图。

要更改 kde 行的颜色,一个明显的想法是使用line_kws={'color': 'red'} ,但这在当前的 seaborn 版本(0.11.1)中不起作用。

但是,您可以分别绘制histplotkdeplot 为了有匹配的 y 轴, histplot需要stat='density' (默认为'count' )。

ax = sns.histplot(x=x, weights=y, discrete=True, alpha=0.5,
                  color='darkblue', edgecolor='black', stat='density')
sns.kdeplot(x=x, weights=y, color='crimson', cut=2, linewidth=4, ax=ax)

另一种方法是在之后更改线条的颜色,它独立于所选的stat=

ax = sns.histplot(x=x, weights=y, discrete=True,
             color='darkblue', edgecolor='black',
             kde=True, kde_kws={'cut': 2}, line_kws={'linewidth': 4})
ax.lines[0].set_color('crimson')

更改线条颜色的 sns.histplot

下面是一个如何将一个数据集的直方图与另一个数据集的 kde 曲线组合的示例:

import matplotlib.pyplot as plt
from matplotlib.ticker import MultipleLocator
import seaborn as sns

x = [30, 31, 32, 33, 34, 35, 36]
y = [1000, 2000, 3000, 4000, 3000, 2000, 1000]
x2 = [20, 21, 22, 23, 24, 25, 26]
y2 = [1000, 2000, 3000, 4000, 3000, 2000, 1000]

ax = sns.histplot(x=x2, weights=y2, discrete=True, alpha=0.5,
                  color='darkblue', edgecolor='black', stat='density')
sns.kdeplot(x=x, weights=y, color='crimson', cut=2, linewidth=4, ax=ax)
ax.xaxis.set_major_locator(MultipleLocator(1))
plt.show()

将 histplot 与不同数据集的 kdeplot 相结合

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM