Estoy tratando de hacer un point and figure chart. Puedo hacer que funcione imprimiendo en la terminal, pero quiero graficarlo con matplotlib. ¿Cuál sería la mejor manera de hacer algo como esto? Estaba pensando en dispersarme, pero cuando hago esto las columnas se extienden demasiado. Me gustaría obtener algo muy parecido al gráfico del enlace que proporcioné, donde las columnas están lo más cerca posible entre sí. ¿Hay algún parámetro que pueda sobrescribir para forzar esto? La primera vez que uso matplotlib, discúlpeme si esto es trivial. Gracias.Gráfico de puntos y figuras con matplotlib
Respuesta
Puede ajustar el tamaño de los símbolos utilizados en un diagrama de dispersión seleccionando s
parameter. También es probable que necesite ajustar el tamaño de su figura (con figsize) o las dimensiones de sus ejes (con add_axes). Esto se debe a que los símbolos de dispersión son cuadrados, en unidades de visualización, y los ejes xey no se ajustan automáticamente, por lo que el ancho de un cambio = altura de un cuadro.
En otras palabras, el ejemplo que proporcionó es un diagrama rectangular con el alto> ancho, y el alto y el ancho se eligen para hacer el ancho de un cambio == altura de un cuadro.
Aquí está un ejemplo de aplicar estas técnicas:
import matplotlib.pyplot as plt
BOX = 5
START = 365
changes = (8, -3, 4, -4, 12, -3, 7, -3, 5, -9, 3)
# one way to force dimensions is to set the figure size:
fig = plt.figure(figsize=(5, 10))
# another way is to control the axes dimensions
# for axes to have specific dimensions:
# [ x0, y0, w, h] in figure units, from 0 to 1
#ax = fig.add_axes([.15, .15, .7*.5, .7])
ax = fig.add_axes([.15, .15, .7, .7])
def sign(val):
return val/abs(val)
pointChanges = []
for chg in changes:
pointChanges += [sign(chg)] * abs(chg)
symbol = {-1:'o',
1:'x'}
chgStart = START
for ichg, chg in enumerate(changes):
x = [ichg+1] * abs(chg)
y = [chgStart + i * BOX * sign(chg) for i in range(abs(chg))]
chgStart += BOX * sign(chg) * (abs(chg)-2)
ax.scatter(x, y,
marker=symbol[sign(chg)],
s=175) #<----- control size of scatter symbol
ax.set_xlim(0, len(changes)+1)
fig.savefig('pointandfigure.png')
plt.show()
El método desarrollado para cada diagrama de dispersión es muy hacker, pero el punto clave es que necesitaba para jugar con el parámetro de dispersión s
y el tamaño figura para obtener algo del efecto deseado.
El gráfico resultante es:
ideal sería hacer un método personalizado siguiendo el modelo del método de dispersión. Crearía un Collection
instance personalizado que incluiría las etiquetas x, o's y de mes. También a) ajustará automáticamente el aspecto de los ejes/figura ob) creará símbolos asimétricos. Esta es obviamente una opción avanzada, destinada a alguien que desea contribuir, como desarrollador, al proyecto Matplotlib.
Sin experiencia personal, pero tal vez set_view_interval() o set_data_interval() desde here? He usado Matplotlib para un proyecto, pero no tuve que jugar con la fijación del ancho del eje x.
¿Cómo harías para hacer este mismo gráfico si tienes las X y O en un marco de datos? –
- 1. Matplotlib no muestra las figuras
- 2. Disposición de múltiples figuras utilizando Matplotlib
- 3. Python con matplotlib - dibujo de varias figuras en paralelo
- 4. ¿Cómo acelerar el matplotlib al trazar y guardar muchas figuras?
- 5. figuras matplotlib que desaparecen entre show() y savefig()
- 6. matplotlib gráfico de barras con las fechas
- 7. matplotlib gráfico de barras centrado con fechas
- 8. Matplotlib - Gráfico de contorno con valor único
- 9. Matplotlib: gráfico de contorno con control deslizante
- 10. Gráfico Matplotlib zoom con rueda de desplazamiento
- 11. ¿Cómo extraer puntos de un gráfico?
- 12. Matplotlib: Anotando un gráfico de dispersión 3D
- 13. Trazado de puntos de datos de 3 tuplas en un gráfico de superficie/contorno usando matplotlib
- 14. gráfico de puntos sin etiquetas
- 15. gráfico con texto personalizado para los puntos del eje x
- 16. Matplotlib: evitando la superposición de puntos de datos en un gráfico "scatter/dot/beeswarm"
- 17. ¿Cómo puedo crear un gráfico de líneas apiladas con matplotlib?
- 18. Matplotlib: puntos de etiqueta en mouseover
- 19. Gráfico de barras con etiquetas verticales en python/matplotlib
- 20. Configuración de puntos sin datos en blanco con Matplotlib imshow
- 21. Reduce los márgenes izquierdo y derecho en el gráfico matplotlib
- 22. Encontrar los puntos atípicos de matplotlib: boxplot
- 23. Creación de gráfico con la fecha y la hora en las etiquetas del eje con matplotlib
- 24. MATLAB y figuras EPS de alta calidad
- 25. Ignorar puntos con y = 0
- 26. matplotlib: línea extendida más de 2 puntos de control
- 27. matplotlib: selecciona interactivamente puntos o ubicaciones?
- 28. Cómo eliminar líneas en un gráfico Matplotlib
- 29. Marcar puntos con un valor en un gráfico de MATLAB
- 30. Cómo dar un gráfico de barras pandas/matplotlib colores personalizados
Si Jeff está escuchando aquí, ha dicho que ha imprimido con éxito la tabla de P & F en la terminal. Podrías pl. compartir el código python (o al menos la lógica)? Estoy tratando de desarrollar la tabla P & F en Python. Si se puede imprimir en la terminal, intentaré llevarlo al formato HTML. Gracias, – Vineet
¿Alguna vez obtuvo un gráfico de punto y figura de trabajo trazado. –