Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在xaxis的末尾设置xlabel_Python_Matplotlib - Fatal编程技术网

Python 如何在xaxis的末尾设置xlabel

Python 如何在xaxis的末尾设置xlabel,python,matplotlib,Python,Matplotlib,我想我的x轴有这样的标签格式 0 1 2 3 4 5 Xlabel 但是我尝试了下面的代码,结果我得到了两行代码 self.axes.set_xticks(np.arange(0,6,1)) self.axes.set_xlabel('Xlabel', fontsize=9,x=1,y=1) =>我的结果:( 设置xlabel时,x参数以轴单位指定位置,因此0是原点,1是绘图的右边缘。y被忽略,因为它预计是默认值,正好位于刻度线下方 要覆盖此行为,可以使用轴设置位置(以轴为单位)。也可以通过

我想我的x轴有这样的标签格式

0 1 2 3 4 5 Xlabel
但是我尝试了下面的代码,结果我得到了两行代码

self.axes.set_xticks(np.arange(0,6,1))
self.axes.set_xlabel('Xlabel', fontsize=9,x=1,y=1)
=>我的结果:(


设置xlabel时,
x
参数以轴单位指定位置,因此0是原点,1是绘图的右边缘。
y
被忽略,因为它预计是默认值,正好位于刻度线下方

要覆盖此行为,可以使用轴设置位置(以轴为单位)。也可以通过提供变换来使用其他单位

以下是一个例子:

import matplotlib.pyplot as plt
import numpy as np

ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
label = ax.set_xlabel('Xlabel', fontsize = 9)
ax.xaxis.set_label_coords(1.05, -0.025)

plt.savefig('labelAtEnd.png')
plt.show()
导致:

选择x值(1.05)将标签定位在轴框架外。选择y值(-0.025)作为对所需位置的最佳猜测。使用变换,可以根据
勾选
标签自动定位文本

编辑:

这是一个使用转换的扩展示例。使用最后一个ticklabel的转换并不一定更有帮助,因为它没有考虑文本的大小和对齐方式。因此,为了获得某种想要的效果,我必须1)对x标签使用相同的字体大小,2)将垂直对齐(va)定位到“顶部”,和3)将水平对齐定位到“左侧”。每个记号的变换设置为x的数据单位(因为它是x轴)和y的轴单位(0到1),但由x轴的固定填充(以像素为单位)替换

import matplotlib.pyplot as plt
import numpy as np

ax = plt.gca()
ax.set_xticks(np.arange(0,6,1))
ax.set_yticks(np.arange(0,6,1))
label = ax.set_xlabel('xlabel', ha='left', va = 'top', )#fontsize = 9)

# need to draw the figure first to position the tick labels
fig = plt.gcf()
fig.draw(fig.canvas.get_renderer())

# get a tick and will position things next to the last one
ticklab = ax.xaxis.get_ticklabels()[0]
trans = ticklab.get_transform()
ax.xaxis.set_label_coords(5.1, 0, transform=trans)

plt.savefig('labelAtEnd2.png')
plt.show()
这导致:


除了@Yann已经说过的以外,使用
注释实际上更容易做到这一点。缩放/平移时,它也将保持在正确的位置

import matplotlib.pyplot as plt
import matplotlib as mpl

ticklabelpad = mpl.rcParams['xtick.major.pad']

fig, ax = plt.subplots()
ax.set_xlim([0, 5])

# Add the label as annotation. The "5" is the padding betweent the right side
# of the axis and the label...
ax.annotate('XLabel', xy=(1,0), xytext=(5, -ticklabelpad), ha='left', va='top',
            xycoords='axes fraction', textcoords='offset points')

plt.show()

这是我使用@JoeKington方法的变体。 我将最后一个记号标签更改为轴名称。首先,我将最后一个记号设置为空字符串,然后使用annotate()。我使用annotate()是因为我需要控制axis标签的字体大小

import numpy as np
import matplotlib.pyplot as plt

plt.xlim(50, 70)
plt.ylim(100, 250)

ax = plt.gca()
# clears last tick label
xticks = ax.get_xticks().tolist()
xticks[-1] = ''
ax.set_xticklabels(xticks)
yticks = ax.get_yticks().tolist()
yticks[-1] = ''
ax.set_yticklabels(yticks)
# sets axes labels on both ends
ax.annotate('$t$', xy=(0.98, 0), ha='left', va='top', xycoords='axes fraction', fontsize=20)
ax.annotate('$x$', xy=(0, 1), xytext=(-15,2), ha='left', va='top', xycoords='axes fraction', textcoords='offset points', fontsize=20)

plt.show(block=True)
也许有人知道更优雅的方法,因为这是一个可笑的复杂操作


我使用@JoeKington提供的解决方案,扩展了对ax.annotate(…)
生成的文本施加标签字体属性

当轴标签的格式与其他文本不同时,这一点很重要

import matplotlib.pyplot as plt
import matplotlib as mpl

ticklabelpad = mpl.rcParams['xtick.major.pad']

fig, ax = plt.subplots()
ax.set_xlim([0, 5])

dx_in_points = 5
fontproperties = ax.xaxis.get_label().get_fontproperties()

ax.annotate('XLabel', xy=(1,0), xytext=(dx_in_points, -ticklabelpad), ha='left', va='top',
         xycoords='axes fraction', textcoords='offset points', fontproperties=fontproperties)

plt.show()

你能给出一个使用转换的例子吗?@Zhenya我添加了一个例子,但结果证明它不是微不足道的。这能回答你的问题吗?
import matplotlib.pyplot as plt
import matplotlib as mpl

ticklabelpad = mpl.rcParams['xtick.major.pad']

fig, ax = plt.subplots()
ax.set_xlim([0, 5])

dx_in_points = 5
fontproperties = ax.xaxis.get_label().get_fontproperties()

ax.annotate('XLabel', xy=(1,0), xytext=(dx_in_points, -ticklabelpad), ha='left', va='top',
         xycoords='axes fraction', textcoords='offset points', fontproperties=fontproperties)

plt.show()