为xp轴指定matplotlib.pyplot直方图的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为xp轴指定matplotlib.pyplot直方图的值相关的知识,希望对你有一定的参考价值。

给定一个数据集,我想在一个图中创建三个直方图。数据(只是一个巨大的数据集的小片段,会打破模具)看起来像这样:

x,         y1,        y2,      y3
2.0466115, 0,        0,        0
2.349824,  0,        0,        0
2.697959,  0,        0,        0
3.097671,  0.195374, 0.191008, 0.167979
3.5566025, 0.522926, 0.511492, 0.426324
4.083526,  0.691916, 0.6774083,0.5790586666666666
4.688515,  0.8181206,0.801901, 0.6795873333333334
5.3831355, 0.8489766,0.833376, 0.707486
6.1806665, 0.809022, 0.795524, 0.6750806666666667

我的所有x值都相同,y1y2y3代表三个不同的y值。我正在为每个列创建一个单独的列表,并将它们作为pyplot.hist的参数传递。你可以在这里看到我的代码:

import numpy as np
from matplotlib import pyplot
from excel_to_csv import coordinates

y1 = coordinates(1) #another method, which creates the list out of the column
y2 = coordinates(2)
y3 = coordinates(3)

bins = np.linspace(0, 10, 150)

pyplot.hist(y1, bins, alpha=0.5, label='y1')
pyplot.hist(y2, bins, alpha=0.5, label='y2')
pyplot.hist(y3, bins, alpha=0.5, label='y3')
pyplot.legend(loc='upper right')
pyplot.show()

此代码生成以下图(关于实际数据集):plot就我研究而言,您为x轴的范围创建bins。但我没有这样做,而是想把我的x值放在那里。

我的目标是直方图看起来像这样,但作为直方图(再一次 - 关于巨大的数据集):enter image description here

答案

您可以使用np.histogram然后绘制直方图的值:

import numpy as np
import matplotlib.pyplot as plt

# Generate sample data
y1 = np.random.normal(3,1,10000)
y2 = np.random.normal(5,1,10000)
y3 = np.random.normal(7,1,10000)

bins = np.linspace(0, 10, 150)

x = np.linspace(0,10000,149)

# Plot regular histograms
plt.figure()
plt.hist(y1, bins, alpha=0.5, label='y1')
plt.hist(y2, bins, alpha=0.5, label='y2')
plt.hist(y3, bins, alpha=0.5, label='y3')
plt.ylabel('Frequency')
plt.xlabel('Bins')
plt.legend(loc='upper right')
plt.show()

Histogram plot

# Compute histogram data
h1 = np.histogram(y1, bins)
h2 = np.histogram(y2, bins)
h3 = np.histogram(y3, bins)

# Compute bin average
bin_avg = bins[0:-1] + bins[1] - bins[0]

# Plot histogram data as a line with markers
plt.figure()
plt.plot(bin_avg, h1[0], alpha=0.5, label='y1', marker='o')
plt.plot(bin_avg, h2[0], alpha=0.5, label='y2', marker='o')
plt.plot(bin_avg, h3[0], alpha=0.5, label='y3', marker='o')
plt.ylabel('Frequency')
plt.xlabel('Bins')
plt.legend(loc='upper right')
plt.show()

Line plot with markers

绘制分箱数据与x的关系是没有意义的,因为一旦数据被直方图转换后,它与x的关系就不再相同了。

以上是关于为xp轴指定matplotlib.pyplot直方图的值的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib.pyplot画图笔记

Matplotlib/pyplot:如何强制执行轴范围?

python 使用matplotlib.pyplot.hist和numpy权重的标准化直方图

numpy和matplotlib绘制直方图

python的绘图工具matplotlib.pyplot

使用matplotlib.pyplot中plot()绘制折线图