0

私は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'

条件付き頻度分布を操作する方法はありますか? ありがとうございました!

ここに画像の説明を入力

4

1 に答える 1

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

ここに画像の説明を入力

于 2014-05-19T22:40:53.310 に答える