2014-11-01 3 views
3

Уважаемый питон/Matplotlib сообщества,Несколько шагов гистограмм в Matplotlib

У меня возникли проблемы в Matplotlib: Я не могу показаться, чтобы построить несколько наложенных друг на друга гистограмм в том же участке пространства, используя следующие:

binsize = 0.05 

min_x_data_sey, max_x_data_sey = np.min(logOII_OIII_sey), np.max(logOII_OIII_sey) 
num_x_bins_sey     = np.floor((max_x_data_sey - min_x_data_sey)/binsize) 

min_x_data_comp, max_x_data_comp = np.min(logOII_OIII_comp), np.max(logOII_OIII_comp) 
num_x_bins_comp     = np.floor((max_x_data_comp - min_x_data_comp)/binsize) 

min_x_data_sf, max_x_data_sf  = np.min(logOII_OIII_sf), np.max(logOII_OIII_sf) 
num_x_bins_sf      = np.floor((max_x_data_sf - min_x_data_sf)/binsize) 

axScatter_farright = fig.add_subplot(gs_right[0,0]) 

axScatter_farright.tick_params(axis='both', which='major', labelsize=10) 
axScatter_farright.tick_params(axis='both', which='minor', labelsize=10) 
axScatter_farright.set_ylabel(r'$\mathrm{N}$', fontsize='medium') 
axScatter_farright.set_xlim(-1.5, 1.0) 
axScatter_farright.set_xlabel(r'$\mathrm{log([OII]/[OIII])}$', fontsize='medium') 

axScatter_farright.hist(logOII_OIII_sey, num_x_bins_sey, ec='0.3', fc='none', histtype='step') 
axScatter_farright.hist(logOII_OIII_comp, num_x_bins_comp, ec='0.3', fc='none', histtype='step') 
axScatter_farright.hist(logOII_OIII_sf, num_x_bins_sf, ec='0.3', fc='none', histtype='step') 

Кажется, что класс осей не может обрабатывать несколько гистограмм? Пожалуйста, исправьте меня, если и/или где я ошибся.

Мой общий участок - это 1-я строка, 3-х столбцовое пространство. Я хотел бы использовать спецификацию сетки, чтобы дать графику хороший макет.

Это то, что мой сюжет выглядит до сих пор:

enter image description here

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

enter image description here

у меня есть наборы данных, как три разных массивов типа кортеж сгенерированных из файла CSV. то есть с использованием x, y = np.genfromtext(datafile.csv)

Если кто-нибудь может объяснить, как это можно сделать, я был бы очень благодарен.

ответ

4

То, что вы делаете, должно работать отлично. Возможно ли, что только одно из распределений находится в диапазоне x от -1,5 до 1, что вы уже установили пару строк? (Т.е. Попробуйте удалить вручную set_xlim заявление и посмотреть, если другие дистрибутивы обнаружиться.)

Как быстро, автономный пример, чтобы продемонстрировать, что все должно работать:

import numpy as np 
import matplotlib.pyplot as plt 

num = 1000 
d1 = np.random.normal(-1, 1, num) 
d2 = np.random.normal(1, 1, num) 
d3 = np.random.normal(0, 3, num) 

fig, ax = plt.subplots() 
ax.hist(d1, 50, ec='red', fc='none', lw=1.5, histtype='step', label='Dist A') 
ax.hist(d2, 50, ec='green', fc='none', lw=1.5, histtype='step', label='Dist B') 
ax.hist(d3, 100, ec='blue', fc='none', lw=1.5, histtype='step', label='Dist C') 
ax.legend(loc='upper left') 
plt.show() 

enter image description here

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

+1

Я получаю следующая ошибка при одновременном использовании xlim on и off: AttributeError: max должен быть больше min в параметре диапазона. –

+1

Я думаю, что моя проблема исходит из максимальных и минимальных данных. –

+1

Удивительный сюрприз, у меня есть несколько NaNs в одном из массивов кортежей. Фрик Фрик! –

Смежные вопросы