【发布时间】:2011-02-27 12:45:30
【问题描述】:
我已成功增加了刻度标签的字体,但现在它们离轴太近了。我想在刻度标签和轴之间添加一点呼吸空间。
【问题讨论】:
标签: python matplotlib
我已成功增加了刻度标签的字体,但现在它们离轴太近了。我想在刻度标签和轴之间添加一点呼吸空间。
【问题讨论】:
标签: python matplotlib
axes 绘图,但figure 还有其他选项,它们都可以通过指定x= 和y= 参数来定位。
from matplotlib.cbook import get_sample_data
import matplotlib.pyplot as plt
import numpy as np
fig, axs = plt.subplots(3, 5, figsize=(8, 5), constrained_layout=True,
sharex=True, sharey=True)
fname = get_sample_data('percent_bachelors_degrees_women_usa.csv',
asfileobj=False)
gender_degree_data = np.genfromtxt(fname, delimiter=',', names=True)
majors = ['Health Professions', 'Public Administration', 'Education',
'Psychology', 'Foreign Languages', 'English',
'Art and Performance', 'Biology',
'Agriculture', 'Business',
'Math and Statistics', 'Architecture', 'Physical Sciences',
'Computer Science', 'Engineering']
for nn, ax in enumerate(axs.flat):
ax.set_xlim(1969.5, 2011.1)
column = majors[nn]
column_rec_name = column.replace('\n', '_').replace(' ', '_')
line, = ax.plot('Year', column_rec_name, data=gender_degree_data, lw=2.5)
ax.set_title(column, fontsize='small', loc='left', y=1.05) # move the axes title
ax.set_ylim([0, 100])
ax.tick_params(axis='both', which='major', pad=15) # move the tick labels
ax.grid()
fig.supxlabel('Year', y=-0.15) # with adjusted position
fig.supylabel('Percent Degrees Awarded To Women', x=-0.05) # with adjusted position
fig.suptitle('Majors', y=1.15) # with adjusted position
plt.show()
【讨论】:
ytick.major.pad: 5。 YMMV。
如果您不想全局更改间距(通过编辑 rcParams),并且想要更简洁的方法,请尝试以下操作:
ax.tick_params(axis='both', which='major', pad=15)
或仅用于 x 轴
ax.tick_params(axis='x', which='major', pad=15)
或y轴
ax.tick_params(axis='y', which='major', pad=15)
【讨论】:
ax.xaxis.set_tick_params(pad=n)
看起来 matplotlib 将这些设置视为 rcParams:
pylab.rcParams['xtick.major.pad']='8'
pylab.rcParams['ytick.major.pad']='8'
设置那些之前你创建任何数字,你应该没问题。
我查看了源代码,似乎没有任何其他方式可以以编程方式设置它们。 (tick.set_pad() 看起来它试图做正确的事情,但填充似乎是在构造 Ticks 时设置的,之后无法更改。)
【讨论】:
with plt.rc_context({"xtick.major.pad": 10}): 此行下方缩进的任何代码都将使用设置绘制在 rc_context 中指定。
这可以使用set_pad 完成,但您必须重置标签...
for tick in ax.get_xaxis().get_major_ticks():
tick.set_pad(8.)
tick.label1 = tick._get_text1()
【讨论】:
ytick.major.pad: 5.0、axes.labelpad: 10.0 和其他相关设置的样式文件。然而,让它符合自己的口味会浪费许多宝贵的时间。