#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 🙂