graficos - Gire el texto del eje en matplotlib python
python grafico circular (9)
Aparte de
plt.xticks(rotation=90)
esto también es posible:
plt.xticks(rotation=''vertical'')
No puedo entender cómo rotar el texto en el eje X. Es una marca de tiempo, por lo que a medida que aumenta el número de muestras, se acercan más y más hasta que se superponen. Me gustaría rotar el texto 90 grados para que las muestras se acerquen, no se superponen.
Debajo está lo que tengo, funciona bien con la excepción de que no puedo entender cómo rotar el texto del eje X.
import sys
import matplotlib
matplotlib.use(''Agg'')
import matplotlib.pyplot as plt
import datetime
font = {''family'' : ''normal'',
''weight'' : ''bold'',
''size'' : 8}
matplotlib.rc(''font'', **font)
values = open(''stats.csv'', ''r'').readlines()
time = [datetime.datetime.fromtimestamp(float(i.split('','')[0].strip())) for i in values[1:]]
delay = [float(i.split('','')[1].strip()) for i in values[1:]]
plt.plot(time, delay)
plt.grid(b=''on'')
plt.savefig(''test.png'')
Dependerá de lo que estás tramando.
import matplotlib.pyplot as plt
x=[''long_text_for_a_label_a'',
''long_text_for_a_label_b'',
''long_text_for_a_label_c'']
y=[1,2,3]
myplot = plt.plot(x,y)
for item in myplot.axes.get_xticklabels():
item.set_rotation(90)
Para pandas y seres marinos que te dan un objeto Axes:
df = pd.DataFrame(x,y)
#pandas
myplot = df.plot.bar()
#seaborn
myplotsns =sns.barplot(y=''0'', x=df.index, data=df)
# you can get xticklabels without .axes cause the object are already a
# isntance of it
for item in myplot.get_xticklabels():
item.set_rotation(90)
Si necesita rotar las etiquetas, es posible que necesite cambiar también el tamaño de la fuente, puede usar font_scale=1.0
para hacerlo.
Esto funciona para mí:
plt.xticks(rotation=90)
Mi respuesta está inspirada en la respuesta de cjohnson318, pero no quería proporcionar una lista de etiquetas codificadas; Quise rotar las etiquetas existentes:
for tick in ax.get_xticklabels():
tick.set_rotation(45)
Pruebe pyplot.setp. Creo que podrías hacer algo como esto:
x = range(len(time))
plt.xticks(x, time)
locs, labels = plt.xticks()
plt.setp(labels, rotation=90)
plt.plot(x, delay)
Se me ocurrió un ejemplo similar. De nuevo, la palabra clave de rotación es ... bueno, es la clave.
from pylab import *
fig = figure()
ax = fig.add_subplot(111)
ax.bar( [0,1,2], [1,3,5] )
ax.set_xticks( [ 0.5, 1.5, 2.5 ] )
ax.set_xticklabels( [''tom'',''dick'',''harry''], rotation=45 ) ;
Si usa plt
:
plt.xticks(rotation=90)
En caso de usar pandas o seaborn para trazar, suponiendo ax
como ejes para la trama:
ax.set_xticklabels(ax.get_xticklabels(), rotation=90)
Otra forma de hacer lo anterior:
for tick in ax.get_xticklabels():
tick.set_rotation(45)
Camino fácil
Tal como se describe aquí , existe un método existente en la clase de figure
matplotlib.pyplot
que gira las fechas de forma automática para su figura.
Puede llamarlo después de trazar sus datos (es decir, ax.plot(dates,ydata)
:
fig.autofmt_xdate()
Si necesita formatear las etiquetas aún más, revise el enlace de arriba.
Objetos que no son de fecha y hora
Según el comentario de languitar , el método que sugerí para los xticks
que no xticks
fecha y hora no se actualizaría correctamente al hacer zoom, etc. Si no se trata de un objeto datetime
utilizado como su eje x, debe seguir la respuesta de Tommy :
for tick in ax.get_xticklabels():
tick.set_rotation(45)
import pylab as pl
pl.xticks(rotation = 90)