matplotlib plot graph visualization

matplotlib - Relación entre ppp y tamaño de figura



graph visualization (1)

El tamaño de la figura (tamaño de la figura) determina el tamaño de la figura en pulgadas. Esto proporciona la cantidad de espacio que los ejes (y otros elementos) tienen dentro de la figura. El tamaño predeterminado de la figura es (6.4, 4.8) pulgadas en matplotlib 2. Un tamaño de figura más grande permitirá textos más largos, más ejes o más etiquetas.

Los puntos por pulgada (ppp) determinan cuántos píxeles comprende la figura. El dpi predeterminado en matplotlib es 100. Una figura de figsize=(w,h) tendrá

px, py = w*dpi, h*dpi # pixels # e.g. # 6.4 inches * 100 dpi = 640 pixels

Entonces, para obtener una figura con un tamaño de píxel, por ejemplo (1200,600) , puede elegir varias combinaciones de tamaño de figura y ppp, por ejemplo

figsize=(15,7.5), dpi= 80 figsize=(12,6) , dpi=100 figsize=( 8,4) , dpi=150 figsize=( 6,3) , dpi=200 etc.

Ahora, ¿cuál es la diferencia? Esto está determinado por el tamaño de los elementos dentro de la figura. La mayoría de los elementos como líneas, marcadores, textos tienen un tamaño dado en puntos.
Las figuras de Matplotlib usan puntos por pulgada (ppi) de 72. Una línea con un grosor de 1 punto será 1./72. pulgada de ancho. Un texto con un tamaño de letra de 12 puntos será 12./72. pulgada de altura.

Por supuesto, si cambia el tamaño de la figura en pulgadas, los puntos no cambiarán, por lo que una figura más grande en pulgadas todavía tiene el mismo tamaño de los elementos. Por lo tanto, cambiar el tamaño de la figura es como tomar un pedazo de papel de un tamaño diferente. Hacerlo, por supuesto, no cambiaría el ancho de la línea dibujada con el mismo lápiz.

Por otro lado, cambiar el dpi escala esos elementos. A 72 ppp, una línea de tamaño de 1 punto tiene un píxel de fuerza. A 144 ppp, esta línea tiene una potencia de 2 píxeles. Por lo tanto, un dpi mayor actuará como una lupa. Todos los elementos son escalados por el poder de aumento de la lente.

En la imagen de abajo a la izquierda, se muestra una comparación para el tamaño de figura constante y los ppp variables. A la derecha, verá una ppp constante y un tamaño de figura variable. Las figuras en cada fila tienen el mismo tamaño de píxel.

Código para reproducir:

import matplotlib.pyplot as plt %matplotlib inline def plot(fs,dpi): fig, ax=plt.subplots(figsize=fs, dpi=dpi) ax.set_title("Figsize: {}, dpi: {}".format(fs,dpi)) ax.plot([2,4,1,5], label="Label") ax.legend() figsize=(2,2) for i in range(1,4): plot(figsize, i*72) dpi=72 for i in [2,4,6]: plot((i,i), dpi)

He creado una figura usando matplotlib pero me he dado cuenta del eje del diagrama y la línea dibujada se aleja.

Al leer este hilo de discusión anterior , se explica cómo establecer el tamaño de la figura.

fig, ax = plt.subplots()

fig.set_size_inches(3, 1.5)

plt.savefig(file.jpeg, edgecolor=''black'', dpi=400, facecolor=''black'', transparent=True)

Con el código anterior (otras configuraciones eliminadas por brevedad), obtengo un archivo de imagen resultante con 1200 X 600 dimensiones deseadas (¿deberíamos decir también resolución?) Y el tamaño de archivo deseado.

La imagen proyectada se escala de manera inusual, las anotaciones, por ejemplo, se amplían. Si bien puedo establecer el tamaño de las etiquetas en el eje, la figura no parece proporcional con respecto a la escala, ya que las espinas inferior y derecha son grandes y también lo son las líneas trazadas.

Por lo tanto, la pregunta es, ¿qué configuraciones van mal?