python - 如何用点而不是条形图创建直方图

标签 python pandas numpy seaborn histplot

我想绘制直方图,但使用点而不是条形图。

x_n10_p0_6 = binom.rvs(n=10, p=0.6, size=10000, random_state=0)
x_n10_p0_8 = binom.rvs(n=10, p=0.8, size=10000, random_state=0)
x_n20_p0_8 = binom.rvs(n=20, p=0.6, size=10000, random_state=0)

df = pd.DataFrame({
    'x_n10_p0_6': x_n10_p0_6, 
    'x_n10_p0_8': x_n10_p0_8, 
    'x_n20_p0_8': x_n20_p0_8
    })

sns.histplot(df)

这就是我得到的:

enter image description here

我希望看到这样的东西:

enter image description here

来源:https://en.wikipedia.org/wiki/Binomial_distribution#/media/File:Binomial_distribution_pmf.svg

histplot 有一个元素属性,但它只接受值 {“bars”, “step”, “poly”}

最佳答案

您正在处理离散分布。相反,kde 图尝试通过平滑输入值来近似连续分布。因此,带有离散值的 kdeplot 只能给出您想要的图的粗略近似值。

Seaborn 的 histplot 目前仅实现离散分布的条形图。但是,您可以通过 matplotlib 模拟这样的图。这是一个例子:

import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
from scipy.stats import binom
import pandas as pd
import numpy as np

x_n10_p0_6 = binom.rvs(n=10, p=0.6, size=10000, random_state=0)
x_n10_p0_8 = binom.rvs(n=10, p=0.8, size=10000, random_state=0)
x_n20_p0_8 = binom.rvs(n=20, p=0.6, size=10000, random_state=0)

df = pd.DataFrame({
  'x_n10_p0_6': x_n10_p0_6,
  'x_n10_p0_8': x_n10_p0_8,
  'x_n20_p0_8': x_n20_p0_8
})
for col in df.columns:
  xmin = df[col].min()
  xmax = df[col].max()
  counts, _ = np.histogram(df[col], bins=np.arange(xmin - 0.5, xmax + 1, 1))
  plt.scatter(range(xmin, xmax + 1), counts, label=col)
plt.legend()
plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))  # force integer ticks for discrete x-axis
plt.ylim(ymin=0)
plt.show()

using dots to show discrete histogram

请注意,seaborn 的 histplot 有比本示例中显示的更多选项(例如,将计数缩小到密度)。

关于python - 如何用点而不是条形图创建直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76894982/

相关文章:

python - pandas 数据框中的列将列表作为值。如何创建此列的版本,但仅包含列表中的第一个值?

python - Pandas 重新排列数据框

python - 某个 skiprows 参数后的 pandas 内存错误

python - 如何将没有换行符的大(3-4GB)文件读入 numpy 数组?

python - 按 id 过滤最大数量

Python file.read() 方法

python - Python Gtk+ 问题

python - 将pyqtgraph导出到视频

python - 有什么方法可以解决python中的耦合微分方程系统?

python - 具有特定间隙的 numpy 排列