Python чертит условные частотные распределения

Я довольно новичок в Python, поэтому я работаю над книгой nltk. Я также пытаюсь познакомиться с манипулированием графиками и графиками. Я построил условное распределение частот и хотел бы начать с удаления верхнего и левого позвоночника. Вот что у меня есть:

import nltk
import sys
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.pyplot import show
from nltk.corpus import state_union

#cfdist1
cfd = nltk.ConditionalFreqDist(
    (word, fileid[:4])
    for fileid in state_union.fileids()
    for w in state_union.words(fileid)
    for word in ['men', 'women', 'people']
    if w.lower().startswith(word))
cfd.plot()


 for loc, spine in cfd.spines.items():
    if loc in ['left','bottom']:
        spine.set_position(('outward',0)) # outward by 0
    elif loc in ['right','top']:
        spine.set_color('none') # don't draw spine
    else:
        raise ValueError('unknown spine location: %s'%loc)

Я получаю следующую ошибку:

AttributeError: 'ConditionalFreqDist' object has no attribute 'spines'

Есть ли способ манипулировать распределением частоты? Спасибо!

1 ответ

Колючки не являются элементом условного распределения частоты, они являются элементом осей, на которых построено условное распределение частоты. Вы можете получить к ним доступ, назначив переменную осям. Ниже приведен пример и еще один пример.

Есть дополнительное осложнение. cfd.plot() вызывает plt.show, который немедленно отображает фигуру. Для того, чтобы обновить его после этого вам нужно быть в интерактивном режиме. В зависимости от используемого вами бэкэнда вы можете включить интерактивный режим с помощью plt.ion(). Пример ниже будет работать с MacOSX, Qt4Agg и, возможно, другими, но я не проверял это. Вы можете узнать, какой бэкэнд вы используете, с помощью matplotlib.get_backend().

import nltk
import matplotlib.pyplot as plt
from nltk.corpus import state_union

plt.ion() # turns interactive mode on

#cfdist1
cfd = nltk.ConditionalFreqDist(
    (word, fileid[:4])
    for fileid in state_union.fileids()
    for w in state_union.words(fileid)
    for word in ['men', 'women', 'people']
    if w.lower().startswith(word))

ax = plt.axes()
cfd.plot()

ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
ax.set_title('A Title')

plt.draw() # update the plot
plt.savefig('cfd.png') # save the updated figure

Другие вопросы по тегам