Python对象属性作为变量

时间:2018-09-09 02:47:50

标签: python matplotlib

我正在尝试为python对象属性分配一个变量。这是我一直在尝试做的事情:

from read import *
import matplotlib.pyplot as plt
import numpy as np

data=table('data.txt')

semi=data['data']['a']
ecc = data['data']['e']
incl= data['data']['i']
bias = data['data']['bias']    

fig = plt.figure()
ax1 = fig.add_axes([0.06, 0.1, 0.4, 0.35])
ax2 = fig.add_axes([0.06, 0.6, 0.4, 0.35])
ax3 = fig.add_axes([0.55, 0.6, 0.4, 0.35])
ax4 = fig.add_axes([0.55, 0.1, 0.4, 0.35])

aaa = getattr(ax1,'xaxis')


nax={'ax1':ax1,'ax2':ax2,'ax3':ax3,'ax4':ax4}

for a in sorted(nax):

  aax = {'xaxis':nax[a].get_xaxis()}
  for axis in ['bottom','left']:
     nax[a].spines[axis].set_linewidth(0.5)
  for axis in ['right','top']:
     nax[a].spines[axis].set_visible(False)
  for b in sorted(aax):
     nax[a].b.set_tick_position('bottom')

当我运行我的代码时,它说:

Traceback (most recent call last):
  File "./test1.py", line 35, in <module>
    ax1.b.set_ticks_position('bottom')
AttributeError: 'Axes' object has no attribute 'b'

最初在以下情况下有效:

ax1.xaxis.set_tick_position('bottom')

但是为了创建绘图模板,我需要使XAxis属性成为变量。 知道如何使上述功能起作用吗?

2 个答案:

答案 0 :(得分:2)

尝试使用x.set_tick_position('bottom')而不是ax1.x.set_tick_position('bottom')x已经是ax1对象的属性,因此您无需再次访问ax1

此外,如果您静态知道属性名称,则不需要getattr。您可以只做x = ax1.xaxis

答案 1 :(得分:0)

我建议直接在对象上工作。

nax=[ax1,ax2,ax3,ax4]

for ax in nax:

   for axis in ['bottom','left']:
       ax.spines[axis].set_linewidth(0.5)
   for axis in ['right','top']:
       ax.spines[axis].set_visible(False)

   ax.xaxis.set_tick_position('bottom')