Укажите значения по оси x для гистограммы mathplotlib.pyplot - PullRequest
0 голосов
/ 25 марта 2019

Учитывая определенный набор данных, я хотел бы создать три гистограммы на одном графике.Данные (просто небольшой фрагмент огромного набора данных, который сломает шаблон) выглядят так:

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 одинаковы, y1, y2 и y3представляют три разных значения у.Я создаю отдельный список для каждого столбца и передаю их в качестве аргумента для 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 Насколько я исследовал, вы создаете binsдля диапазона оси х.Но вместо этого я хотел бы поместить туда свои значения x.

Моя цель - гистограмма, похожая на эту, но в виде гистограммы (еще раз - относительно огромного набора данных): enter image description here

1 Ответ

0 голосов
/ 25 марта 2019

Вы можете использовать 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, больше не совпадает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...