Добавить 0 начальных и конечных значений в строку гистограммы (matplotlib)

#python #numpy #matplotlib

#python #numpy #matplotlib

Вопрос:

Я бы хотел, чтобы строка, наложенная на эту гистограмму, обнулялась с обоих концов. Я предполагал, что добавления 0 значений в начало и конец массивов данных будет достаточно, но, похоже, это не работает.

график

 plt.style.use('seaborn-white')
data = np.array(sizes_)
n, bins, _ = plt.hist(data, bins=bins, alpha=0.2, density=True)
plt.grid(axis='y', alpha=0.5)
plt.xlim([0, 500])
bin_centers = 0.5 * (bins[1:]   bins[:-1])

## Tried this but doesn't work
np.insert(bin_centers, 0, 0)
np.append(bin_centers, 500)
np.insert(n, 0, 0)
np.append(n, 0)
##

plt.plot(bin_centers, n)
plt.xlabel('length (nts)')
plt.ylabel('frequency')
plt.title('Length Distribution')
plt.savefig(outfile)
  

Есть идеи, как я могу это сделать?

Комментарии:

1. ни numpy.append , ни numpy.insert не изменяйте ни один из исходных массивов. Вместо этого они возвращают вновь созданный массив. Вы хотели бы построить этот новый массив, newarray = np.append(oldarray, furthervalues)

2. Бум. Вот и все!

Ответ №1:

Вам нужно сохранить массивы после вставки. Кроме того, вам нужно добавить одну пару значений x-y в конце массивов. Ниже приведен один из способов сделать это с использованием образца набора данных, поскольку вы не предоставили MCVE

 plt.style.use('seaborn-white')
np.random.seed(121)
sizes_ = np.random.randint(2, 100, 50)
data = np.array(sizes_)
n, bins, _ = plt.hist(data, bins=20, alpha=0.2, density=True)
plt.grid(axis='y', alpha=0.5)
bin_centers = 0.5 * (bins[1:]   bins[:-1])

bin_diff = np.diff(bin_centers)[-1]

bin_centers = np.insert(bin_centers, 0, 0)
bin_centers = np.insert(bin_centers, len(bin_centers), bin_centers[-1]   bin_diff)

n = np.insert(n, 0, 0)
n = np.insert(n, len(n), 0)

plt.plot(bin_centers, n)
plt.xlabel('length (nts)')
plt.ylabel('frequency')
plt.title('Length Distribution')
  

введите описание изображения здесь

Ответ №2:

np.append() и np.insert() не являются встроенными функциями, они возвращают результат, и вы должны присвоить его своей переменной ( bin_centers = np.insert(bin_centers, 0, bins[0]) )

 import numpy as np
from matplotlib import pyplot as plt

plt.style.use('seaborn-white')
data = np.array([15, 20, 14, 10, 20, 21, 18, 8])
n, bins, _ = plt.hist(data, alpha=0.2, density=True)
plt.grid(axis='y', alpha=0.5)
plt.xlim([0, 30])
bin_centers = 0.5 * (bins[1:]   bins[:-1])

bin_centers = np.insert(bin_centers, 0, bins[0])
bin_centers = np.append(bin_centers, bins[-1])
n = np.insert(n, 0, 0)
n = np.append(n, 0)

plt.plot(bin_centers, n)
plt.xlabel('length (nts)')
plt.ylabel('frequency')
plt.title('Length Distribution')
plt.show()
  

введите описание изображения здесь