Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
288 views
in Technique[技术] by (71.8m points)

python - matplotlib and subplots properties

I'm adding a matplotlib figure to a canvas so that I may integrate it with pyqt in my application. I were looking around and using plt.add_subplot(111) seem to be the way to go(?) But I cannot add any properties to the subplot as I may with an "ordinary" plot

figure setup

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

hboxlayout = qt.QVBoxLayout()

hboxlayout.addWidget(self.graphtoolbar1)
hboxlayout.addWidget(self.canvas1)

frameGraph1.setLayout(hboxlayout)

creating subplot and adding data

df = self.quandl.getData(startDate, endDate, company)

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

I'd like to set x and y labels, but if I do ax.xlabel("Test")

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

which is possible if I did it by not using subplot

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()

So I guess my question is, is it not possible to modify subplots further? Or is it possible for me to plot graphs in a pyqt canvas, without using subplots so that I may get benefit of more properties for my plots.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

plt.subplot returns a subplot object which is a type of axes object. It has two methods for adding axis labels: set_xlabel and set_ylabel:

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

You could also call plt.xlabel and plt.ylabel (like you did before) and specify the axes to which you want the label applied.

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

Since you only have one axes, you could also omit the axes kwarg since the label will automatically be applied to the current axes if one isn't specified.

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...