python 如何在matplotlib子图上设置属性

qlzsbp2j  于 2023-05-27  发布在  Python
关注(0)|答案(2)|浏览(138)

我在画布上添加了一个matplotlib图形,以便在应用程序中将其与pyqt集成。我环顾四周,使用plt.add_subplot(111)似乎是要走的路(?)但是我不能像在“普通”情节中那样在子情节中添加任何属性。
图形设置

figure1 = plt.figure()
canvas1 = FigureCanvas(figure1)
graphtoolbar1 = NavigationToolbar(canvas1, frameGraph1)

hboxlayout = qt.QVBoxLayout()
        
hboxlayout.addWidget(graphtoolbar1)
hboxlayout.addWidget(canvas1)
        
frameGraph1.setLayout(hboxlayout)

创建子区并添加数据

df = quandl.getData(startDate, endDate, company)
          
ax = figure1.add_subplot(111)
ax.hold(False)
ax.plot(df['Close'], 'b-')
ax.legend(loc=0)
ax.grid(True)

我想设置x和y标签,但如果我设置ax.xlabel("Test")

AttributeError: 'AxesSubplot' object has no attribute 'ylabel'

如果我不使用子情节的话这是可能的

plt.figure(figsize=(7, 4))
plt.plot(df['Close'], 'k-')
plt.grid(True)
plt.legend(loc=0)
plt.xlabel('value')
plt.ylabel('frequency')
plt.title('Histogram')
locs, labels = plt.xticks()
plt.setp(labels, rotation=25)
plt.show()

所以我想我的问题是,是否有可能进一步修改次要情节?或者,我是否可以在pyqt画布中绘制图形,而不使用子图,这样我就可以从更多的属性中受益?

2wnc66cl

2wnc66cl1#

plt.subplot返回一个子图对象,它是一种轴对象。它有两种添加轴标签的方法:set_xlabelset_ylabel

ax = plt.subplot('111')
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')

您还可以调用plt.xlabelplt.ylabel(就像您之前所做的那样),并指定要应用标签的轴。

ax = plt.subplot('111')
plt.xlabel('X Axis', axes=ax)
plt.ylabel('Y Axis', axes=ax)

因为只有一个轴,所以也可以省略axes kwarg,因为如果没有指定,标签将自动应用于当前轴。

ax = plt.subplot('111')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
k4ymrczo

k4ymrczo2#

几乎所有的matplotlib属性都定义了一个set()方法。例如,Axes对象定义了一个set()方法,可用于设置轴标签、刻度、标题等。在次要情节上Axis标签是Text对象(可以通过ax.yaxis.labelax.xaxis.label访问),它们还定义了一个set()方法来更改内容。

fig, ax = plt.subplots(facecolor='white', figsize=(6,3))
ax.plot(range(5))
# set properties on this ax
ax.set(xlabel='X Axis', ylabel='Y Axis', title='Title', xticks=range(5))
ax.yaxis.label.set(rotation=0, ha='right')  # modify properties on ylabel
ax.title.set(fontsize=20);                  # change title properties

同样的工作也可以使用set_*方法完成。

fig, ax = plt.subplots(facecolor='white', figsize=(6,3))
ax.plot(range(5))
ax.set_xlabel('X Axis')                          # set xlabel
ax.set_ylabel('Y Axis', rotation=0, ha='right')  # set ylabel with properties
ax.set_title('Title', fontsize=20)               # set title
ax.set_xticks(range(5));                         # set xticks

相关问题