python - real - En matplotlib, ¿cómo dibuja tramos de ejes de estilo R que apuntan hacia afuera desde los ejes?
python graficos 2d (2)
En su archivo de configuración matplotlib, matplotlibrc, puede configurar:
xtick.direction : out # direction: in or out
ytick.direction : out # direction: in or out
y esto hará que las marcas principales y secundarias salgan de forma predeterminada, como R. Para un solo programa, simplemente haga:
>> from matplotlib import rcParams
>> rcParams[''xtick.direction''] = ''out''
>> rcParams[''ytick.direction''] = ''out''
Debido a que se dibujan dentro del área de trazado, las marcas de los ejes quedan ocultas por los datos en muchos de los gráficos de matplotlib. Un mejor enfoque es dibujar las marcas que se extienden desde los ejes hacia afuera , como es el valor predeterminado en ggplot
, el sistema de trazado de R.
En teoría, esto se puede hacer redibujando las líneas de tictac con los TICKLEFT
línea TICKDOWN
y TICKLEFT
para las TICKLEFT
del eje x y el eje y, respectivamente:
import matplotlib.pyplot as plt
import matplotlib.ticker as mplticker
import matplotlib.lines as mpllines
# Create everything, plot some data stored in `x` and `y`
fig = plt.figure()
ax = fig.gca()
plt.plot(x, y)
# Set position and labels of major and minor ticks on the y-axis
# Ignore the details: the point is that there are both major and minor ticks
ax.yaxis.set_major_locator(mplticker.MultipleLocator(1.0))
ax.yaxis.set_minor_locator(mplticker.MultipleLocator(0.5))
ax.xaxis.set_major_locator(mplticker.MultipleLocator(1.0))
ax.xaxis.set_minor_locator(mplticker.MultipleLocator(0.5))
# Try to set the tick markers to extend outward from the axes, R-style
for line in ax.get_xticklines():
line.set_marker(mpllines.TICKDOWN)
for line in ax.get_yticklines():
line.set_marker(mpllines.TICKLEFT)
# In real life, we would now move the tick labels farther from the axes so our
# outward-facing ticks don''t cover them up
plt.show()
Pero en la práctica, eso es solo la mitad de la solución porque los métodos get_xticklines
y get_yticklines
solo devuelven las principales líneas de tictac. Las garrapatas menores siguen apuntando hacia adentro.
¿Cuál es la solución alternativa para las garrapatas menores?
Puede obtener a los menores en al menos dos formas:
>>> ax.xaxis.get_ticklines() # the majors
<a list of 20 Line2D ticklines objects>
>>> ax.xaxis.get_ticklines(minor=True) # the minors
<a list of 38 Line2D ticklines objects>
>>> ax.xaxis.get_minorticklines()
<a list of 38 Line2D ticklines objects>
Tenga en cuenta que el 38 se debe a que la llamada MultipleLocator también dibujó líneas secundarias menores en las ubicaciones "principales".