matplotlib中的笛卡尔坐标轴标签

4

I have the following code:

from mpl_toolkits.axes_grid.axislines import SubplotZero
import matplotlib.pyplot as plt
import numpy

if 1:
    fig = plt.figure(1)
    ax = SubplotZero(fig, 111)
    fig.add_subplot(ax)

    ax.axhline(linewidth=2.0, color="black")
    ax.axvline(linewidth=2.0, color="black")

    ax.set_xticks([1])
    ax.set_yticks([1])
    ax.set_xticklabels(['x'])
    ax.set_yticklabels(['y'])

    for direction in ["xzero", "yzero"]:
        ax.axis[direction].set_axisline_style("-|>")
        ax.axis[direction].set_visible(True)

    for direction in ["left", "right", "bottom", "top"]:
        ax.axis[direction].set_visible(False)

    x = numpy.linspace(-0.5, 1., 100)
    ax.plot(x, numpy.sin(x*numpy.pi), linewidth=2.0)

    plt.show()

这将生成以下图形:

graph

有两个问题:

  1. "y"标签是侧着的 - 我怎么让它垂直?
  2. "x"和"y"标签都不在轴线上 - 我想让它们直接出现在轴箭头后面。
1个回答

4

实现这一点的一个简单方法是使用 Axestextannotate 方法,并带有一个 transform kwarg。

from mpl_toolkits.axes_grid.axislines import SubplotZero
from matplotlib.transforms import BlendedGenericTransform
import matplotlib.pyplot as plt
import numpy

fig = plt.figure(1)
ax = SubplotZero(fig, 111)
fig.add_subplot(ax)

ax.axhline(linewidth=2.0, color="black")
ax.axvline(linewidth=2.0, color="black")

ax.set_xticks([])
ax.set_yticks([])

ax.text(0, 1.05, 'y', transform=BlendedGenericTransform(ax.transData, ax.transAxes), ha='center')
ax.text(1.05, 0, 'x', transform=BlendedGenericTransform(ax.transAxes, ax.transData), va='center')

for direction in ["xzero", "yzero"]:
    ax.axis[direction].set_axisline_style("-|>")
    ax.axis[direction].set_visible(True)

for direction in ["left", "right", "bottom", "top"]:
    ax.axis[direction].set_visible(False)

x = numpy.linspace(-0.5, 1., 100)
ax.plot(x, numpy.sin(x*numpy.pi), linewidth=2.0)

plt.show()

enter image description here


一个非常简单的解决方案!你真棒,我现在将把我的第一个孩子命名为“nordev”。 - nebffa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接