No puedo obtener la barra de color en gráficos como este para que tenga la misma altura que el gráfico, salvo el uso de Photoshop después del hecho. ¿Cómo consigo que coincidan las alturas?
python
image
matplotlib
Elliot
fuente
fuente
fraction
oshrink
args.Respuestas:
Puede hacerlo fácilmente con un matplotlib AxisDivider .
El ejemplo de la página vinculada también funciona sin usar subtramas:
fuente
plt.title
, se mostrará intercambiado a la derecha. ¿Hay una manera de superar esto?Esta combinación (y valores cercanos a estos) parece funcionar "mágicamente" para mí para mantener la barra de colores ajustada a la trama, sin importar el tamaño de la pantalla.
Tampoco requiere compartir el eje que puede sacar la trama de forma cuadrada.
fuente
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
dóndedata
está su imagen.@bogatron ya dio la respuesta sugerida por los documentos matplotlib , que produce la altura correcta, pero presenta un problema diferente. Ahora, el ancho de la barra de colores (así como el espacio entre la barra de colores y el gráfico) cambia con el ancho del gráfico. En otras palabras, la relación de aspecto de la barra de colores ya no está fija.
Para obtener la altura correcta y una relación de aspecto dada, debes profundizar un poco más en el misterioso
axes_grid1
módulo.Tenga en cuenta que esto especifica el ancho de la barra de colores y la altura del gráfico (en contraste con el ancho de la figura, como era antes).
El espacio entre la barra de colores y la gráfica ahora se puede especificar como una fracción del ancho de la barra de colores, que en mi humilde opinión es un número mucho más significativo que una fracción del ancho de la figura.
ACTUALIZAR:
He creado un cuaderno de IPython sobre el tema , en el que lleno el código anterior en función de un lugar fácilmente reutilizable:
Se puede usar así:
fuente
Agradezco todas las respuestas anteriores. Sin embargo, como señalaron algunas respuestas y comentarios, el
axes_grid1
módulo no puede abordar GeoAxes, mientras que al ajustarfraction
,pad
,shrink
, y otros parámetros similares puede no necesariamente dar la orden muy precisa, lo que realmente me molesta. Creo que dar elcolorbar
suyo propioaxes
podría ser una mejor solución para abordar todos los problemas que se han mencionado.Código
Resultado
Más tarde, encuentro
matplotlib.pyplot.colorbar
la documentación oficial también daax
opción, que son ejes existentes que proporcionarán espacio para la barra de colores. Por lo tanto, es útil para múltiples subtramas, vea a continuación.Código
Resultado
De nuevo, también puede lograr efectos similares especificando cax, una forma más precisa desde mi perspectiva.
Código
Resultado
fuente
Cuando creas el
colorbar
intento, use los parámetros de fracción y / o reducción.De los documentos:
fuente
colorbar()
función o método.Todas las soluciones anteriores son buenas, pero me gustan las mejores de @ Steve y @ bejota, ya que no implican llamadas elegantes y son universales.
Por universal quiero decir que funciona con cualquier tipo de ejes incluidos
GeoAxes
. Por ejemplo, si ha proyectado ejes para el mapeo:una llamada a
fallará con:
KeyException: map_projection
Por lo tanto, la única forma universal de tratar el tamaño de la barra de colores con todos los tipos de ejes es:
Trabaja con una fracción de 0.035 a 0.046 para obtener tu mejor tamaño. Sin embargo, los valores para la fracción y el paddig deberán ajustarse para obtener el mejor ajuste para su gráfico y diferirán dependiendo de si la orientación de la barra de colores está en posición vertical u horizontal.
fuente
shrink
parámetros cuando,fraction
junto conpad
no producir los resultados deseados lo suficiente.