¿Cómo agregar la etiqueta del eje (xey) y rotar los números del eje y con Matplotlib como en la imagen de abajo?

enter image description here

Intenté plt.yticks(rotation=45) rotar los números del eje y, pero no se tiene en cuenta.

Además, también estoy intentando tener un 0 en lugar de dos en mi código de ejemplo y una cuadrícula cuadrada en lugar de rectángulos.

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
DevonDahon 13 oct. 2020 a las 00:55

1 respuesta

La mejor respuesta

Aquí hay un ejemplo de código de trabajo que usa spines en lugar de 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()

enter image description here

1
gherka 13 oct. 2020 a las 10:47