Python matplotlib访问ax[i]会导致TypeError:';int';对象不可下标

Python matplotlib访问ax[i]会导致TypeError:';int';对象不可下标,python,matplotlib,Python,Matplotlib,我试图在matplotlib中创建一个自定义绘图,其中子绘图在0和基于数据列的值之间着色。我已将此代码从使用固定轴值(例如,ax1.fillbetweenx())转换为当前代码以访问轴阵列的部分 但是,当我运行该函数时,我从以下行接收到一个TypeError:“int”对象不可下标: ax[i]。在nx(井[深度曲线],0,井[相],其中=(井[曲线]=关键点),面色=颜色)之间填充 任何帮助都将不胜感激。谢谢 职能: 将熊猫作为pd导入 将matplotlib.pyplot作为plt导入 de

我试图在matplotlib中创建一个自定义绘图,其中子绘图在0和基于数据列的值之间着色。我已将此代码从使用固定轴值(例如,
ax1.fillbetweenx()
)转换为当前代码以访问轴阵列的部分

但是,当我运行该函数时,我从以下行接收到一个
TypeError:“int”对象不可下标

ax[i]。在nx(井[深度曲线],0,井[相],其中=(井[曲线]=关键点),面色=颜色)之间填充

任何帮助都将不胜感激。谢谢

职能:

将熊猫作为pd导入
将matplotlib.pyplot作为plt导入
def创建曲线图(井名、数据框、曲线图、深度曲线、岩相曲线=[]):
num_tracks=len(曲线到曲线图)
图,ax=plt.子批次(nrows=1,ncols=num_轨迹,figsize=(num_轨迹*2,10))
图suptitle(井名,fontsize=20,y=1.05)
对于i,枚举中的曲线(曲线到曲线图):
ax[i].绘图(数据帧[曲线]、深度曲线)
ax[i]。设置标题(曲线,fontsize=14,fontwweight='bold')
ax[i].网格(其中,='major',color='浅灰色',linestyle='-')
ax[i]。设置_ylim(depth_curve.max(),depth_curve.min())
如果i==0:
ax[i]。设置标签(“深度(m)”,fontsize=18,fontwweight='bold')
其他:
plt.setp(ax[i].get\u yticklabels(),visible=False)
如果岩相曲线中的曲线:
对于注册表项设置。注册表项():
颜色=岩性设置[键]['color']
ax[i]。在nx之间填充(井[深度曲线],0,4,其中=(井[曲线]==关键点),面颜色=颜色)
plt.紧_布局()
plt.show()
代码和示例数据:

workingdf=pd.DataFrame({'WELL':['A','A','A','A','B','B','B','B'],
“深度”:[4300431043204330434043504360437043804390],
“GR”:[45,40,30,12,6,12,8,10,20,18],
“相”:[1,1,1,1,2,1,2,2,3]})
岩性设置={1:{'lith':'sandes','color':'ffff00'},
2:{'lith':'sandes/Shale','color':'ffe119'},
3:{'lith':'Shale','color':'bebebe'},}
曲线到曲线图=['GR','相']
岩相曲线=[“岩相”]
分组=工作df.groupby('WELL')
#创建空列表
dfs_wells=[]
wellnames=[]
#把数据按井分开
对于油井,分组数据:
dfs_wells.追加(数据)
wellnames.append(well)
井=0
创建图(井名[井],
dfs_wells[井],
曲线图,
dfs_井【井】【深度】,
岩相(U曲线)
下面是我前面代码的最后一个子图中着色效果的示例。这里的代码片段仅用于为子图着色,而无需任何图案填充


感谢tmdavison的评论。该问题与在
ax[i]行中使用
well
而不是
dataframe
有关

代码行已从更改为:

ax[i]。在nx之间填充(井[深度曲线],0,4,其中=(井[曲线]==键),
脸颜色=颜色)

ax[i]。在nx之间填充(深度曲线,0,4,其中=(数据帧[曲线]==关键点),
脸颜色=颜色)
固定函数如下所示


def创建曲线图(井名、数据框、曲线图、深度曲线、岩相曲线=[]):
num_tracks=len(曲线到曲线图)
图,ax=plt.子批次(nrows=1,ncols=num_轨迹,figsize=(num_轨迹*2,10))
图suptitle(井名,fontsize=20,y=1.05)
对于i,枚举中的曲线(曲线到曲线图):
ax[i].绘图(数据帧[曲线]、深度曲线)
ax[i]。设置标题(曲线,fontsize=14,fontwweight='bold')
ax[i].网格(其中,='major',color='浅灰色',linestyle='-')
ax[i]。设置_ylim(depth_curve.max(),depth_curve.min())
如果i==0:
ax[i]。设置标签(“深度(m)”,fontsize=18,fontwweight='bold')
其他:
plt.setp(ax[i].get\u yticklabels(),visible=False)
如果岩相曲线中的曲线:
对于注册表项设置。注册表项():
颜色=岩性设置[键]['color']
ax[i].在nx(深度曲线,0,数据帧[曲线])之间填充,
其中=(数据帧[曲线]==关键点),
脸颜色=颜色)
plt.紧_布局()
plt.show()
这将生成以下绘图:


此外,原始示例数据已更新,以允许填充显示。

您正在尝试使用
井[深度曲线]
井[曲线]
索引
,但
井=0
。也许你想使用另一个变量而不是
?我当前的df中有多个井。我已将
workingdf
拆分为各个数据帧,并将它们存储在列表
dfs\u wells
中。使用
well=0
我正在访问该列表中的第一个数据帧。我应该提到的是,代码运行,并且数据绘图正常,在'if curve in phaceum_curves:'forwardsyes'处没有for循环,但是当调用
create_plot
时,您不会将
well
重新指定给任何其他对象,因此它仍然是
int
。您的错误告诉您无法索引该
int
。在
fill\u betweenx
中,您试图使用什么作为y值?因为我认为它不是
0
谢谢,@tmdavison。我现在明白了。我将很快发布解决方案。