如何使用matplotlib中的直方图输出绘制散点图?

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

我想绘制一个与此类似的散点图:

enter image description here

我可以根据我的数据绘制直方图,但我想要相同数据的散点图。有什么方法可以使用 hist() 方法输出作为散点图的输入吗?或者有其他方法可以使用 matplotlib 中的 hist() 方法绘制散点图? 用于绘制直方图的代码如下:

data = get_data()
plt.figure(figsize=(7,4))
ax = plt.subplots()
plt.hist(data,histtype='bar',bins = 100,log=True)
plt.show()
python matplotlib scatter-plot
2个回答
5
投票

我认为您正在寻找以下内容:

本质上

plt.hist()
输出两个数组(正如 Nordev 指出的一些补丁)。第一个是每个箱中的计数 (
n
),第二个是箱的边缘。

import matplotlib.pylab as plt
import numpy as np

# Create some example data
y = np.random.normal(5, size=1000)

# Usual histogram plot
fig = plt.figure()
ax1 = fig.add_subplot(121)
n, bins, patches = ax1.hist(y, bins=50)  # output is two arrays

# Scatter plot
# Now we find the center of each bin from the bin edges
bins_mean = [0.5 * (bins[i] + bins[i+1]) for i in range(len(n))]
ax2 = fig.add_subplot(122)
ax2.scatter(bins_mean, n)

Example

这是我能想到的最好的,无需更多的问题描述。抱歉,如果我误解了。


0
投票

我基于这些想法并大量增加了垃圾箱的数量。如果箱数较多,图表上的小值不会被淹没,并且您可以更好地看到数据形状。由于数据中有多个峰值,我想删除空箱。我将这些值更改为 float('nan') ,它占据一个位置但不会被绘制并保持图形更清晰。该图用于显示整数点周围解码数据值 (y) 的方差。

counts, bins = np.histogram(y, bins=10000)
counts = [n if n > 0 else float('nan') for n in counts]
pl.scatter(bins[:len(counts)],counts)
pl.xticks(range(12),range(12))
pl.grid()
pl.show()

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