Python 如何在NLTK Matplotlib函数中设置多行的颜色?

Python 如何在NLTK Matplotlib函数中设置多行的颜色?,python,matplotlib,nltk,Python,Matplotlib,Nltk,我有一个NLTK函数,它可以创建一个AxesSubplot,如下所示: #名称结尾字母频率 导入nltk 将matplotlib.pyplot作为plt导入 cfd=nltk.ConditionalFreqDist( (文件ID,名称[-1]) 用于names.fileids()中的fileid 用于名称中的名称。单词(fileid)) plt.图(figsize=(12,6)) cfd.plot() 我想分别改变线条的颜色。我在网上看到的大多数解决方案都使用单独的绘图线单独生成每条线。但是

我有一个NLTK函数,它可以创建一个AxesSubplot,如下所示:

#名称结尾字母频率
导入nltk
将matplotlib.pyplot作为plt导入
cfd=nltk.ConditionalFreqDist(
(文件ID,名称[-1])
用于names.fileids()中的fileid
用于名称中的名称。单词(fileid))
plt.图(figsize=(12,6))
cfd.plot()


我想分别改变线条的颜色。我在网上看到的大多数解决方案都使用单独的绘图线单独生成每条线。但是,matplotlib
.plot()
方法是在ConditionalFreqDist
.plot()
中调用的。有没有其他方法可以改变线条的颜色?我希望母线为蓝色,公线为绿色。

NLTK的
ConditionalFreqDist.plot
方法返回一个普通的matplotlib
对象,如您所见。由此,您可以使用
ax.lines
直接获取线条,并使用
set\u color
设置颜色

我现在没有安装NLTK,所以我将直接制作轴,绘制一条红色和一条蓝色的线,然后将它们变成黑色和绿色

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 15, 21)
y0 = 0.6*np.sin(x)
y1 = np.sin(1.2 + 0.5*x)

fig, ax = plt.subplots(1,1)
ax.plot(x, y0, 'r')
ax.plot(x, y1, 'b')
# this is where ConditionalFreqDist will return the axes

# these are the lines you would write
ax.lines[0].set_color('k')
ax.lines[1].set_color('g')

具体来说,对于OP的情况,它应该如下所示:

import nltk
import matplotlib.pyplot as plt

cfd = nltk.ConditionalFreqDist(
    (fileid, name[-1]) 
    for fileid in names.fileids()
    for name in names.words(fileid))

plt.figure(figsize=(12, 6)) 

ax = cfd.plot()

ax.lines[0].set_color('k')
ax.lines[1].set_color('g')

最后,使用@tom10的建议,这一切都起到了作用:

导入nltk
将matplotlib.pyplot作为plt导入
cfd=nltk.ConditionalFreqDist(
(文件ID,名称[-1])
用于names.fileids()中的fileid
用于名称中的名称。单词(fileid))
图,ax=plt子批次(1,1)
cfd.plot()
ax.lines[0]。设置颜色(“蓝色”)
ax.lines[1]。设置颜色(“绿色”)
图设置尺寸英寸(10,4)
无花果

检查此项:此处建议的解决方案对它们都有效这是否回答了您的问题@当使用
.set\u color\u cycle方法时,我得到一个错误:
AttributeError:'AxesSubplot'对象没有属性'set\u color\u cycle'
@Roim
.set\u prop\u cycle
方法单词,但我无法指定颜色。请在
cfd.plot()之前放置行
fig,ax=plt.subplot(1,1)
,但是当我有一个空列表后再看
ax.lines
。@RobertHensley:The
fig,ax
,etc只是为了从
cfd.plot()
中得到什么。您应该做的是
ax=cfd.plot()
,其中
ax=
是一个编辑,这样您就可以从原始的第一个代码示例中的
cfd.plot
中获取
ax
,然后执行最后两行,
ax.lines[0]。设置颜色('k')
,等等。保存
ax cfd.plot()
时,我可以看到线条对象的列表。但是在执行
ax.line[0]之后,设置
ax=cfd.plot()
后面的线的颜色('k')
,由于某些原因,图形的颜色保持不变。然而,我发现了一个使用您提到的轴函数的解决方案,尽管它有点混乱。@RobertHensley:为了创建图形和轴,我添加了我认为与NLTK和您的初始代码最一致的代码(我应该完成这个完整的代码示例,而不是在我前面的注释中包含代码)。我不确定颜色和名字。。。当然,
'k'
'g'
是有效的matplotlib颜色名称,但它似乎采取了相同的方式,尽管我不知道为什么只有CSS名称才有效;它们也适用于下面的解决方案。只是出于某种原因,保存的
ax
变量并没有更新显示的图形,而是保存了图形并进行了颜色更改