Атрибуты объекта Python как переменные - PullRequest
0 голосов
/ 09 сентября 2018

Я пытаюсь присвоить атрибуту объекта 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 голосов
/ 09 сентября 2018

Я бы предложил работать с объектами напрямую.

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')
0 голосов
/ 09 сентября 2018

Попробуйте x.set_tick_position('bottom') вместо ax1.x.set_tick_position('bottom'). x уже является атрибутом объекта ax1, поэтому вам не нужно снова обращаться к ax1.

Кроме того, нет необходимости в getattr, если вы знаете имя атрибута статически. Вы можете просто сделать x = ax1.xaxis.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...