En lugar de que las palabras o los números sean las etiquetas del eje x, quiero dibujar un dibujo simple (formado por líneas y círculos) como la etiqueta de cada x tilde. es posible? Si es así, ¿cuál es la mejor manera de hacerlo en matplotlib?¿Cómo puedo hacer que las etiquetas xtick de un diagrama sean dibujos simples usando matplotlib?
Respuesta
Quitaría las etiquetas y reemplazaría el texto con patches. He aquí un breve ejemplo de la realización de esta tarea:
import matplotlib.pyplot as plt
import matplotlib.patches as patches
# define where to put symbols vertically
TICKYPOS = -.6
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(range(10))
# set ticks where your images will be
ax.get_xaxis().set_ticks([2,4,6,8])
# remove tick labels
ax.get_xaxis().set_ticklabels([])
# add a series of patches to serve as tick labels
ax.add_patch(patches.Circle((2,TICKYPOS),radius=.2,
fill=True,clip_on=False))
ax.add_patch(patches.Circle((4,TICKYPOS),radius=.2,
fill=False,clip_on=False))
ax.add_patch(patches.Rectangle((6-.1,TICKYPOS-.05),.2,.2,
fill=True,clip_on=False))
ax.add_patch(patches.Rectangle((8-.1,TICKYPOS-.05),.2,.2,
fill=False,clip_on=False))
Esto se traduce en la siguiente figura:
Es clave para establecer clip_on
a False
, de lo contrario patches
fuera de los ejes no será mostrado. Las coordenadas y tamaños (radio, ancho, alto, etc.) de los parches dependerán de dónde se encuentren sus ejes en la figura. Por ejemplo, si está considerando hacer esto con subtramas, necesitará ser sensible a la colocación de parches para no solaparse con ningún otro eje. Puede valer la pena investigar su Transformations y definir las posiciones y tamaños en otra unidad (Ejes, Figura o pantalla).
Si tiene archivos de imágenes específicos que desea utilizar para los símbolos, puede usar la clase BboxImage
para crear artistas que se agregarán a los ejes en lugar de parches. Por ejemplo hice un simple icono con la siguiente secuencia de comandos:
import matplotlib.pyplot as plt
fig = plt.figure(figsize=(1,1),dpi=400)
ax = fig.add_axes([0,0,1,1],frameon=False)
ax.set_axis_off()
ax.plot(range(10),linewidth=32)
ax.plot(range(9,-1,-1),linewidth=32)
fig.savefig('thumb.png')
producir esta imagen:
Entonces creó un BboxImage en el lugar que quiero la etiqueta de la garrapata y del tamaño de E quieren:
lowerCorner = ax.transData.transform((.8,TICKYPOS-.2))
upperCorner = ax.transData.transform((1.2,TICKYPOS+.2))
bbox_image = BboxImage(Bbox([lowerCorner[0],
lowerCorner[1],
upperCorner[0],
upperCorner[1],
]),
norm = None,
origin=None,
clip_on=False,
)
notado cómo he utilizado la transformación transData
convertir de unidades de datos para mostrar las unidades, whic h se requieren en la definición de Bbox
.
Ahora leo en la imagen usando la rutina imread
, y configurarlo de resultados (un array numpy) a los datos de bbox_image
y añadir el artista a los ejes:
bbox_image.set_data(imread('thumb.png'))
ax.add_artist(bbox_image)
Esto se traduce en una cifra actualizada :
Si utiliza directamente las imágenes, asegúrese de importar las clases y los métodos necesarios:
from matplotlib.image import BboxImage,imread
from matplotlib.transforms import Bbox
- 1. Cómo cambiar el tamaño de fuente en un diagrama matplotlib
- 2. ¿Cómo puedo hacer que las texturas sean transparentes en OpenGL?
- 3. ¿Cómo hacer que las propiedades sean privadas?
- 4. Superposición de un lineCollection en un diagrama en matplotlib - cómo hacer que los dos se alineen.
- 5. ¿Cómo puede hacer que las etiquetas de forma horizontal de Bootstrap sean más pequeñas con CSS?
- 6. ¿Cómo puedo colocar una tabla en un diagrama en Matplotlib?
- 7. administrador de Django: ¿cómo hacer que las "líneas" sean colapsables?
- 8. ¿Cómo hacer que las páginas php/html sean seguras/https?
- 9. ¿Cómo puedo hacer que los enlaces sean blancos?
- 10. ¿Cómo puedo hacer que los elementos HTML no sean resaltables?
- 11. diagrama de dispersión en matplotlib
- 12. ¿Cómo puedo hacer las combinaciones de git de tal manera que sean fáciles de revertir?
- 13. ¿Cómo hacer que mis aplicaciones sean "personalizables"?
- 14. Hacer que las clases de servicio de primavera sean definitivas?
- 15. ¿Cómo puedo hacer que las devoluciones de eventos en mis formularios de win sean seguras?
- 16. ¿Cómo puedo hacer que las propiedades de los archivos de propiedades sean obligatorias en Spring?
- 17. Cómo extraer datos del diagrama de matplotlib
- 18. ¿Cómo puedo hacer que los controles de Silverlight sean invisibles para las acciones del mouse?
- 19. diagrama de matplotlib e imshow
- 20. Anotar diagrama de series temporales en Matplotlib
- 21. etiquetas matplotlib matshow
- 22. Escribiendo un compilador: ¿cómo hacer que funcionen plantillas simples?
- 23. Cómo hacer que las urls sean seguras en GAE usando django_wsgi built-in
- 24. ¿Cómo puedo hacer que las excepciones silenciosas sean más fuertes en tkinter?
- 25. ¿Cómo puedo hacer que las URL en Django sean similares a stackoverflow?
- 26. ¿Cómo puedo hacer que las cookies sean seguras (solo https) por defecto en los rieles?
- 27. ¿Cómo puedo suprimir las líneas verticales de la cuadrícula en un diagrama ggplot2 mientras retiene las etiquetas del eje x?
- 28. Shoulda + FactoryGirl: ¿Puedo hacer que mis pruebas sean más rápidas?
- 29. ¿Cómo puedo hacer una subtrama en blanco en matplotlib?
- 30. ¿Cómo puedo dibujar un diagrama de flujo usando LaTeX?