Necesito producir gráficos de dispersión para varios conjuntos de datos 2D automáticamente.
Por defecto se establece la relación de aspecto. ax.set_aspect(aspect="equal")
, que la mayoría de las veces funciona porque la x,y
Los valores se distribuyen más o menos en una región al cuadrado.
A veces, sin embargo, me encuentro con un conjunto de datos que, cuando se traza con el equal
relación, se ve así:
es decir: demasiado estrecho en un eje dado. Para la imagen de arriba, los ejes son aproximadamente 1: 8.
En tal caso, una relación de aspecto de ax.set_aspect(aspect="auto")
resultaría en una trama mucho mejor:
Ahora, no quiero establecer aspect="auto"
como mi predeterminado para todos los conjuntos de datos porque el uso aspect="equal"
es en realidad el forma correcta de mostrar un diagrama de dispersión de este tipo.
Necesito volver a usar ax.set_aspect(aspect="auto")
solo para casos como el anterior.
La pregunta: ¿hay una manera de saber de antemano si la relación de aspecto de una trama será demasiado estrecha si aspect="equal"
se utiliza? Como obtener la relación de aspecto real del conjunto de datos trazados.
De esta manera, en función de ese número, puedo ajustar la relación de aspecto a un aspecto más sano (es decir: auto
o alguna otra relación de aspecto) en lugar de "equal"
.
Respuestas
4 para la respuesta № 1Algo como esto debería hacer,
aspect = (max(x) - min(x)) / (max(y) - min(y))
2 para la respuesta № 2
los axes
método get_data_ratio
Da la relación de aspecto de los límites de tus datos. como se muestra.¹
ax.get_data_ratio()
por ejemplo:
M = 4.0
ax.set_aspect("equal" if 1/M < ax.get_data_ratio() < M else "auto")
¹Este es el recíproco de la respuesta de @farenorth cuando los ejes se amplían alrededor de los datos, es decir, cuando max(y) == max(ax.get_ylim())
ya que se calcula utilizando los rangos en ax.get_ybound
y ax.get_xbound
.