Pyplot使用轴移动原点

时间:2016-08-31 08:23:51

标签: python matplotlib axis-labels

我有一些我想要创建的情节的代码:

import numpy as np
import matplotlib.pyplot as plt

# data
X = np.linspace(-1, 3, num=50, endpoint=True)
b = 2.0
Y = X + b

# plot stuff
fig = plt.figure(figsize=(8,6))
ax = fig.add_subplot(1, 1, 1)
ax.set_title('linear neuron')

# move axes
ax.spines['left'].set_position(('axes', 0.30))
# ax.spines['left'].set_smart_bounds(True)
ax.yaxis.set_ticks_position('left')

ax.spines['bottom'].set_position(('axes', 0.30))
# ax.spines['bottom'].set_smart_bounds(True)
ax.xaxis.set_ticks_position('bottom')

ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# title
title = ax.set_title('Linear Neuron', y=1.10)

# axis ticks
# ax.set_xticklabels([0 if item == 0 else '' for item in X])
# ax.set_yticklabels([])
# for tick in ax.xaxis.get_majorticklabels():
#   tick.set_horizontalalignment('left')
# ax.tick_params(axis=u'both', which=u'both',length=0)

# axis labels
ax.xaxis.set_label_coords(1.04, 0.30 - 0.025)
ax.yaxis.set_label_coords(0.30 - 0.03, 1.04)
y_label = ax.set_ylabel('output')
y_label.set_rotation(0)
ax.set_xlabel('input')

# ax.get_xaxis().set_visible(False)
# ax.get_yaxis().set_visible(False)

# grid
ax.grid(True)


ax.plot(X, Y, '-', linewidth=1.5)

fig.tight_layout()
fig.savefig('plot.pdf')

在此图中,移动x轴和y轴。然而,正如人们可以从刻度线和刻度标签中看到的那样,原点不会被移动。

如何始终使用x和y轴移动原点?

我想这与仅仅看一下情节的另一个区域是一样的,所以x和y轴位于左下角,但不像通常那样在角落里。

想象一下:

current situation

我想要的是什么:

enter image description here

当箭头指向x和y轴交点时,我希望得到原点(0|0)。如果虚线箭头指向上方,我希望线条向上移动,这样当原点移动时,它仍然在数学上处于正确的位置。

(努力的最终结果可以找到here

1 个答案:

答案 0 :(得分:2)

您已经对每件事情进行了大量的手动调整,因此解决方案不是非常便携。但请注意:从原始代码中移除ax.spines['bottom'].set_positionax.xaxis.set_label_coords来电,然后添加:

ax.set_ylim(-1, 6)
ax.spines['bottom'].set_position('zero')
xlabel = ax.xaxis.get_label()
lpos = xlabel.get_position()
xlabel.set_position((1.04, lpos[1]))

"带来起源"只有ax.set_ylim才真正完成,剩下的就是让你的标签在你想要的地方。