简体   繁体   English

Python Matplotlib 图标题与轴重叠 label 使用 twiny 时

[英]Python Matplotlib figure title overlaps axes label when using twiny

I am trying to plot two separate quantities on the same graph using twiny as follows:我正在尝试使用 twiny 在同一图表上 plot 两个单独的数量,如下所示:

fig = figure()
ax = fig.add_subplot(111)
ax.plot(T, r, 'b-', T, R, 'r-', T, r_geo, 'g-')
ax.set_yscale('log')
ax.annotate('Approx. sea level', xy=(Planet.T_day*1.3,(Planet.R)/1000), xytext=(Planet.T_day*1.3, Planet.R/1000))
ax.annotate('Geostat. orbit', xy=(Planet.T_day*1.3, r_geo[0]), xytext=(Planet.T_day*1.3, r_geo[0]))
ax.set_xlabel('Rotational period (hrs)')
ax.set_ylabel('Orbital radius (km), logarithmic')
ax.set_title('Orbital charts for ' + Planet.N, horizontalalignment='center', verticalalignment='top')


ax2 = ax.twiny()
ax2.plot(v,r,'k-')
ax2.set_xlabel('Linear speed (ms-1)')

show()

and the data is presented fine, but I am having the problem that the figure title is overlapping with the axes labels on the secondary x axis so that it's barely legible (I wanted to post a picture example here, but I don't have a high enough rep yet).并且数据显示得很好,但我遇到的问题是图形标题与辅助 x 轴上的轴标签重叠,因此几乎无法辨认(我想在这里发布一个图片示例,但我没有足够高的代表了)。

I'd like to know if there's a straightforward way to just shift the title directly up a few tens of pixels, so that the chart looks prettier.我想知道是否有一种简单的方法可以将标题直接向上移动几十个像素,以便图表看起来更漂亮。

I'm not sure whether it is a new feature in later versions of matplotlib, but at least for 1.3.1, this is simply:我不确定它是否是 matplotlib 更高版本中的新功能,但至少对于 1.3.1,这只是:

plt.title(figure_title, y=1.08)

This also works for plt.suptitle() , but not (yet) for plt.xlabel() , etc.这也适用于plt.suptitle() ,但不适用于plt.xlabel()等。

Forget using plt.title and place the text directly with plt.text .忘记使用plt.title和文本直接放在与plt.text An over-exaggerated example is given below:下面给出了一个过度夸大的例子:

import pylab as plt

fig = plt.figure(figsize=(5,10))

figure_title = "Normal title"
ax1  = plt.subplot(1,2,1)

plt.title(figure_title, fontsize = 20)
plt.plot([1,2,3],[1,4,9])

figure_title = "Raised title"
ax2  = plt.subplot(1,2,2)

plt.text(0.5, 1.08, figure_title,
         horizontalalignment='center',
         fontsize=20,
         transform = ax2.transAxes)
plt.plot([1,2,3],[1,4,9])

plt.show()

在此处输入图片说明

I was having an issue with the x-label overlapping a subplot title;我遇到了 x 标签与子图标题重叠的问题; this worked for me:这对我有用:

import matplotlib.pyplot as plt
fig, ax = plt.subplots(2, 1)
ax[0].scatter(...)
ax[1].scatter(...)
plt.tight_layout()
.
.
.
plt.show()

before

在此处输入图片说明

after

在此处输入图片说明

reference:参考:

ax.set_title('My Title\n', fontsize="15", color="red")
plt.imshow(myfile, origin="upper")

If you put '\\n' right after your title string, the plot is drawn just below the title.如果在标题字符串之后放置'\\n' ,则绘图将绘制在标题下方。 That might be a fast solution too.这也可能是一个快速的解决方案。

您可以在这种情况下使用 pad:

ax.set_title("whatever", pad=20)

Just use plt.tight_layout() before plt.show() .只需在plt.tight_layout()之前使用plt.show() It works well.它运作良好。

A temporary solution if you don't want to get into the x , y position of your title.如果您不想进入标题的x , y位置,这是一个临时解决方案。

Following worked for me.以下为我工作。

plt.title('Capital Expenditure\n') # Add a next line after your title

kudos.荣誉。

Using the plt.tight_layout() before the plt.show() works for me well.plt.tight_layout()之前使用plt.show()对我很有效。

you can even make it better and visible by adding a padding您甚至可以通过添加填充使其更好和可见

ax.set_title("title", pad=15)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM