Como definir a proporção no matplotlib
A proporção de aspecto de um gráfico matplotlib refere-se ao aspecto da escala do eixo, ou seja, a proporção da unidade y para a unidade x.
Esta proporção pode ser modificada usando a função matplotlib.axes.Axes.set_aspect() .
Nos bastidores, a função set_aspect() na verdade altera o que é chamado de sistema de coordenadas de dados , mas na prática geralmente queremos alterar o sistema de coordenadas de exibição .
Para facilitar essa conversão, podemos usar este trecho de código:
#define y-unit to x-unit ratio ratio = 1.0 #get x and y limits x_left, x_right = ax. get_xlim () y_low, y_high = ax. get_ylim () #set aspect ratio ax. set_aspect ( abs ((x_right-x_left)/(y_low-y_high))*ratio)
Vejamos um exemplo de uso dessa função na prática.
Etapa 1: criar um gráfico Matplotlib básico
Primeiro, vamos criar um gráfico de linhas simples usando Matplotlib:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt. subplots () #create simple line plot ax. plot ([0, 10],[0, 20]) #displayplot plt. show ()
Etapa 2: definir a proporção (da maneira errada)
Observe que o eixo x é maior que o eixo y. Vamos tentar definir a proporção para 1, ou seja, os eixos x e y devem ser iguais:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt. subplots () #create simple line plot ax. plot ([0, 10],[0, 20]) #attempt to set aspect ratio to 1 ax. set_aspect (1) #displayplot plt. show ()
Observe que isso não funcionou conforme o esperado. O eixo y é muito mais longo que o eixo x.
Etapa 3: definir a proporção (da maneira certa)
O código a seguir mostra como usar um cálculo simples para definir a proporção correta:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt. subplots () #create simple line plot ax. plot ([0, 10],[0, 20]) #set aspect ratio to 1 ratio = 1.0 x_left, x_right = ax. get_xlim () y_low, y_high = ax. get_ylim () ax. set_aspect ( abs ((x_right-x_left)/(y_low-y_high))*ratio) #displayplot plt. show ()
Observe que este gráfico tem a proporção que esperávamos. Os eixos x e y têm comprimentos iguais.
Etapa 4: ajuste a proporção como desejar
Se quisermos que o eixo y seja maior que o eixo x, podemos simplesmente especificar que a proporção seja um número maior que 1:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt. subplots () #create simple line plot ax. plot ([0, 10],[0, 20]) #set aspect ratio to 3 ratio = 3 x_left, x_right = ax. get_xlim () y_low, y_high = ax. get_ylim () ax. set_aspect ( abs ((x_right-x_left)/(y_low-y_high))*ratio) #displayplot plt. show ()
E se quisermos que o eixo y seja menor que o eixo x, podemos simplesmente especificar que a proporção seja um número menor que 1:
import matplotlib.pyplot as plt #define matplotlib figure and axis fig, ax = plt. subplots () #create simple line plot ax. plot ([0, 10],[0, 20]) #set aspect ratio to .3 ratio = .3 x_left, x_right = ax. get_xlim () y_low, y_high = ax. get_ylim () ax. set_aspect ( abs ((x_right-x_left)/(y_low-y_high))*ratio) #displayplot plt. show ()
Você pode encontrar mais tutoriais do Matplotlib aqui .