使用 twiny 时,Python Matplotlib 图形标题与轴标签重叠

问题描述 投票:0回答:9

我正在尝试使用 twiny 在同一个图表上绘制两个单独的量,如下所示:

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

数据显示得很好,但我遇到的问题是图形标题与辅助 x 轴上的轴标签重叠,因此几乎难以辨认(我想在这里发布一个图片示例,但我没有还足够高的代表)。

我想知道是否有一种简单的方法可以将标题直接向上移动几十个像素,以便图表看起来更漂亮。

python matplotlib title figure
9个回答
299
投票

我不确定这是否是 matplotlib 更高版本中的新功能,但至少对于 1.3.1,这很简单:

plt.title(figure_title, y=1.08)

这也适用于

plt.suptitle()
,但(尚)不适用于
plt.xlabel()


37
投票

忘记使用

plt.title
,直接使用
plt.text
放置文本。下面给出一个过于夸张的例子:

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

enter image description here


25
投票

我遇到了 x 标签与子图标题重叠的问题;这对我有用:

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

之前

enter image description here

之后

enter image description here

参考:


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

如果将

'\n'
放在标题字符串后面,则绘图将绘制在标题下方。这也可能是一个快速的解决方案。


11
投票

您可以使用垫子来处理这种情况:

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

6
投票

只需在

plt.tight_layout()
之前使用
plt.show()
。效果很好。


0
投票

如果您不想进入标题的

x
y
位置,这是一个临时解决方案。

以下对我有用。

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

荣誉。


0
投票

plt.tight_layout()
之前使用
plt.show()
对我来说效果很好。

您甚至可以通过添加填充来使其更好、更可见

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

0
投票

您可以使用垫子

title

plt.title("My title", pad=20)

如果您使用

title
subtitle
,则在
pad
上使用
title
有助于向上推并缩小两个标题之间的间距。

plt.suptitle('Main title')
plt.title("This is the second title", pad=20)
© www.soinside.com 2019 - 2024. All rights reserved.