Я пытаюсь создать класс с именем My_Axes.У него есть модуль 'size', который принимает в качестве аргументов размер фигуры, nx, ny - сколько графиков и делится - (True или False), хочу ли я поделиться Xaxis или нет.
Тогдаесть внутренний класс под названием «Стиль».Он предназначен для изменения вида осей, возвращаемых My_Axes.size ().В этом случае я нацеливаюсь на матлаб, похожий на тонкие топоры и шрифт Helvetica.Ниже мой код.Пожалуйста, прости меня, так как я все еще изучаю Python.
class My_Axes:
def __init__(self):
self.style = self.Style()
def size(self,fig_siz,nx,ny,share):
import matplotlib.pyplot as plt
from matplotlib.ticker import MaxNLocator
import numpy as np
self.fig_siz=fig_siz
self.nx = nx
self.ny = ny
self.share = share
fig = plt.figure(figsize = self.fig_siz)
x, y = self.fig_siz
self.nax = {}
self.n = 0
for i in range(self.nx):
for j in range(self.ny):
if self.share:
width = (0.9/self.nx)
height =(0.9/self.ny)
xpos = 0.08 + i*width
ypos = 0.08 + j*height
a = fig.add_axes([xpos,ypos,width,height])
self.nax['ax'+str(self.n)] = a
if j > 0: self.nax['ax'+str(self.n)].set_xticklabels([])
if i > 0: self.nax['ax'+str(self.n)].set_yticklabels([])
self.nax['ax'+str(self.n)].yaxis.set_major_locator(MaxNLocator(prune='lower'))
self.nax['ax'+str(self.n)].xaxis.set_major_locator(MaxNLocator(prune='lower'))
self.n += 1
else:
width = ((0.6+(x+y)/180.)/self.nx)
height =((0.6+(x+y)/180.)/self.ny)
xpos = 0.08 + (width + 0.1)*i
ypos = 0.08 + (height + 0.1)*j
a = fig.add_axes([xpos,ypos,width,height])
self.nax['ax'+str(self.n)] = a
self.n += 1
axx = self.nax
return axx
class Style:
def __init__(self,axx):
self.nax = axx
def matlb(self):
from matplotlib import rc, font_manager
ticks_font = font_manager.FontProperties(family='Helvetica', style='normal',
size=12, weight='normal', stretch='normal')
for a in sorted(self.nax):
aax = self.nax[a].xaxis
aay = self.nax[a].yaxis
for axis in ['bottom','left']:
self.nax[a].spines[axis].set_linewidth(0.3)
for axis in ['right','top']:
self.nax[a].spines[axis].set_visible(False)
aax.set_ticks_position('bottom')
aay.set_ticks_position('left')
lsiz = 8 + 4./self.n
self.nax[a].xaxis.set_tick_params(labelsize=lsiz)
self.nax[a].yaxis.set_tick_params(labelsize=lsiz)
return self.nax
#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
aax = My_Axes().size((8,8),3,3,True)
aax.style.matlb
Когда я запускаю код, я получаю сообщение об ошибке:
Traceback (most recent call last):
File "/Users/aya/Desktop/test_class2.py", line 103, in <module>
aax = My_Axes().size((8,8),3,3,True)
File "/Users/aya/Desktop/test_class2.py", line 23, in __init__
self.style = self.Style()
TypeError: __init__() takes exactly 2 arguments (1 given)
[Finished in 0.5s with exit code 1]
[shell_cmd: python -u "/Users/aya/Desktop/test_class2.py"]
[dir: /Users/aya/Desktop]
[path: /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/bin:/sbin:/Library/TeX/texbin:/opt/X11/bin]