Как добавить метку оси (x и y) и повернуть номера по оси y с помощью Matplotlib

#python #matplotlib

#python #matplotlib

Вопрос:

Как добавить метку оси (x и y) и повернуть числа по оси y с помощью Matplotlib, как на изображении ниже?

введите описание изображения здесь

Я пытался plt.yticks(rotation=45) повернуть числа по оси y, но это не учитывается.

Кроме того, я также пытаюсь использовать один 0 вместо двух в моем примере кода и квадратную сетку вместо прямоугольников.

 from mpl_toolkits.axisartist.axislines import SubplotZero
import matplotlib.pyplot as plt
import numpy as np


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

for direction in ["xzero", "yzero"]:
    # adds arrows at the ends of each axis
    ax.axis[direction].set_axisline_style('->')
    # adds X and Y-axis from the origin
    ax.axis[direction].set_visible(True)

ax.axis['yzero'].set_ticklabel_direction("-")

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

x = np.linspace(-5, 5, 100)
ax.plot(x, -x**2 16, color="#ab74a6", linewidth=3)

plt.title(r'$y = -x^2 16$')

plt.yticks(rotation=45)

plt.axis([-5, 5, -10, 20])

plt.grid(True)

plt.show()
  

Комментарии:

1. Я в замешательстве. Числа в вашем примере изображения не поворачиваются

2. @PaulH если я не использую add_subplot , вращение работает, но я больше не получаю что-то похожее на мой пример изображения с осью x и y только со стрелками.

3. Помогает ли этот пример?

4. @gherka Да, много, это устраняет большинство моих проблем и упрощает код! : D

Ответ №1:

Вот пример рабочего кода, использующий spines вместо SubplotZero :

 import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure(figsize=(10,5))
ax = fig.add_subplot(111)

x = np.linspace(-5, 5, 100)
ax.plot(x, -x**2 16, color="#ab74a6", linewidth=3)

ax.spines['left'].set_position('zero')
ax.spines['right'].set_color('none')
ax.spines['bottom'].set_position('zero')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

# hide one of the zero labels and adjust the other
ax.yaxis.get_major_ticks()[3].label1.set_visible(False)
ax.xaxis.get_major_ticks()[3].label1.set_horizontalalignment("right")

ax.plot(1, 0, ">k", transform=ax.get_yaxis_transform(), clip_on=False)
ax.plot(0, 1, "^k", transform=ax.get_xaxis_transform(), clip_on=False)

ax.axis('equal')
ax.set_xlabel('x', position=(1,0), ha='right')
ax.set_ylabel('y', position=(0,1), ha='right', rotation=0)

plt.title(r'$y = -x^2 16$', y=1.08)
plt.grid(True)

plt.show()
  

введите описание изображения здесь

Комментарии:

1. Любой способ добавить x y метки и, получить красивую квадратную сетку и стрелки?

2. Конечно. Смотрите обновленный ответ. Поскольку аспект фигуры (10, 5) не квадратный, сетка также не квадратная, но вы можете легко это изменить. Квадратные картинки просто не выглядят так хорошо на SO 🙂