Как hist () построить каждую строку массива данных массива 2d NumPy с помощью Matplotlib? - PullRequest
2 голосов
/ 01 августа 2020

У меня есть 3x10 2d ndarray, на котором я хотел бы построить сюжет matplotlib hist. Мне нужен график истории каждой строки массива в одном подзаголовке. Я попытался предоставить ndarray напрямую, но обнаружил, что matplotlib предоставит истории-графики для каждого столбца ndarray, чего я не хочу. Как я могу достичь своей цели? В настоящее время я должен явно объявлять команды hist() для каждой строки, и я бы предпочел избежать этого подхода.

import numpy as np
import matplotlib.pyplot as plt

d = np.array([[1, 2, 2, 2, 3, 1, 3, 1,   2,  4, 5],
              [4, 4, 5, 5, 3, 6, 6,  7,   6,  5, 7],
              [5, 6, 7, 7, 8, 8, 9, 10, 11, 12, 10]] )

print( '\nd', d )
             
fig, ax = plt.subplots(4, 1)
dcount, dbins, dignored = ax[0].hist( d, bins=[2, 4, 6, 8, 10, 12], histtype='bar', label='d' )
d0count, d0bins, d0ignored = ax[1].hist( d[0,:], bins=[2, 4, 6, 8, 10, 12], histtype='bar', label='d0', alpha=0.2 )
d1count, d1bins, d1ignored = ax[2].hist( d[1,:], bins=[2, 4, 6, 8, 10, 12], histtype='bar', label='d1', alpha=0.2 )
d2count, d2bins, d2ignored = ax[3].hist( d[2,:], bins=[2, 4, 6, 8, 10, 12], histtype='bar', label='d2', alpha=0.2 )
ax[0].legend()
ax[1].legend()
ax[2].legend()
ax[3].legend()
print( '\ndcount', dcount )
print( '\ndbins', dbins )
print( '\ndignored', dignored )
print( '\nd0count', d0count )
print( '\nd0bins', d0bins )
print( '\nd0ignored', d0ignored )
print( '\nd1count', d0count )
print( '\nd1bins', d0bins )
print( '\nd1ignored', d0ignored )
print( '\nd2count', d0count )
print( '\nd2bins', d0bins )
print( '\nd2ignored', d0ignored )
plt.show()

фигура

Ответы [ 2 ]

1 голос
/ 01 августа 2020
# import needed packages
import numpy as np
import matplotlib.pyplot as plt

Создание данных для построения

Используя понимание списка и numpy.random.normal:

gaussian0=[np.random.normal(loc=0, scale=1.5) for _ in range(100)]
gaussian1=[np.random.normal(loc=2, scale=0.5) for _ in range(100)]

gaussians = [gaussian0, gaussian1]

Участок только с одним историческим вызовом

for gaussian in gaussians:
    plt.hist(gaussian,alpha=0.5)
plt.show()

Результат:

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

0 голосов
/ 01 августа 2020

Я нашел способ попроще. Транспонировать d. То есть замените

dcount, dbins, dignored = ax[0].hist( d, bins=[2, 4, 6, 8, 10, 12], histtype='bar', label='d' )

на

dcount, dbins, dignored = ax[0].hist( d.T, bins=[2, 4, 6, 8, 10, 12], histtype='bar', label=['d0', 'd1','d2'], alpha=0.5 )

фиг1а

Я надеялся, что команда hist() matplotlib будет иметь некоторую команду для этого, но не нашла ее. Транспонирование массива numpy сработало. Интересно, это обычный способ, которым пользователь matplotlib делает это?

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