如何将直方图绘制为散点图

问题描述 投票:0回答:1

如何在Python中绘制类似的图?

example

import matplotlib.pylab as plt
import numpy as np
from scipy.stats import binom

y = binom.rvs(n = 10, p = 0.5, size = 100)
counts, bins = np.histogram(y, bins=50)
plt.scatter(bins[:len(counts)], counts)
plt.grid()
plt.show()
python matplotlib scatter-plot
1个回答
1
投票

首先,当数据是离散的时,箱边缘应该位于值之间。只需设置

bins=50
即可将最低值和最高值之间的距离分成 50 个大小相等的区域。如果其中一些区域的起点和终点都位于相同的整数之间,则它们可能不会获得任何值。

要在散点图中显示值,您可以使用 bin 的中心作为 x 位置,使用值 1、2、... 直到 bin 的计数作为 y 位置。

import matplotlib.pylab as plt
import numpy as np
from scipy.stats import binom

y = binom.rvs(n=10, p=0.5, size=100)
counts, bins = np.histogram(y, bins=np.arange(y.min() - 0.5, y.max() + 1, 1))
centers = (bins[:-1] + bins[1:]) / 2
for center, count in zip(centers, counts):
    plt.scatter(np.repeat(center, count), np.arange(count) + 1, marker='o', edgecolor='blue', color='none')
plt.grid(axis='y')
plt.ylim(ymin=0)
plt.show()

histogram as a scatter plot

这是一个连续分布的示例:

import matplotlib.pylab as plt
import numpy as np

y = np.random.randn(200).cumsum()
counts, bins = np.histogram(y, bins=25)
centers = (bins[:-1] + bins[1:]) / 2
for center, count in zip(centers, counts):
    plt.scatter(np.repeat(center, count), np.arange(count) + 1, marker='o', edgecolor='red', color='none')
plt.grid(axis='y')
plt.ylim(ymin=0)
plt.show()

histogram of a continuous distribution as a scatter plot

© www.soinside.com 2019 - 2024. All rights reserved.