2016-07-07 4 views
3

Вдохновленный этим question, как вы делаете такой же сюжет в питоне? Этот сюжет направлен на то, чтобы иметь приятное визуальное представление о том, как ваш дистрибутив отключен от ожидаемого распространения. Он зависает столбцами вашей гистограммы с ожидаемой линией распределения, поэтому разница между ожидаемым значением считывается между нижней частью строки и осью x, а не между верхней частью строки и ожидаемой кривой распределения.Как построить висящую корневую диаграмму в python?

Я не нашел встроенную функцию.

hanging rootogram

ответ

7

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

import matplotlib.pyplot as plt 
import numpy as np 
import matplotlib.mlab as mlab 

fig, ax = plt.subplots(1, 2) 
mu = 10 
sig = 0.3 
my_data = np.random.normal(mu, sig, 200) 
x = np.linspace(9, 11, 100) 

# I plot the data twice, one for the histogram only for comparison, 
# and one for the rootogram. 
# The trick will be to modify the histogram to make it hang to 
# the expected distribution curve: 

for a in ax: 
    a.hist(my_data, normed=True) 
    a.plot(x, mlab.normpdf(x, mu, sig)) 
    a.set_ylim(-0.2) 
    a.set_xlim(9, 11) 
    a.hlines(0, 9, 11, linestyle="--") 

for rectangle in ax[1].patches: 

    # expected value in the middle of the bar 
    exp = mlab.normpdf(rectangle.get_x() + rectangle.get_width()/2., mu, sig) 

    # difference to the expected value 
    diff = exp - rectangle.get_height() 
    rectangle.set_y(diff) 

    ax[1].plot(rectangle.get_x() + rectangle.get_width()/2., exp, "ro") 

ax[0].set_title("histogram") 
ax[1].set_title("hanging rootogram") 
plt.tight_layout() 

Что дает:

Hanging rootogram python

HTH

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

  • Нет связанных вопросов^_^