Não consigo fazer com que a barra de cores em gráficos de exibição como esta tenha a mesma altura do gráfico, sem usar o Photoshop depois do fato. Como faço para combinar as alturas?
python
image
matplotlib
Elliot
fonte
fonte
fraction
oushrink
args.Respostas:
Você pode fazer isso facilmente com um AxisDivider matplotlib .
O exemplo da página vinculada também funciona sem o uso de subtramas:
fonte
plt.title
, ele será exibido trocado para a direita. Existe uma maneira de superar isso?Essa combinação (e valores próximos a esses) parece funcionar "magicamente" para manter a barra de cores dimensionada para o gráfico, independentemente do tamanho da exibição.
Também não requer o compartilhamento do eixo que pode obter o gráfico fora do quadrado.
fonte
im_ratio = data.shape[0]/data.shape[1]
plt.colorbar(im,fraction=0.046*im_ratio, pad=0.04)
ondedata
está sua imagem.O @bogatron já deu a resposta sugerida pelos documentos do matplotlib , que produz a altura certa, mas apresenta um problema diferente. Agora, a largura da barra de cores (assim como o espaço entre a barra de cores e a plotagem) muda com a largura da plotagem. Em outras palavras, a proporção da barra de cores não é mais fixa.
Para obter a altura correta e uma determinada proporção, você precisa se aprofundar um pouco no misterioso
axes_grid1
módulo.Observe que isso especifica a largura da barra de cores e a altura do gráfico (em contraste com a largura da figura, como era antes).
O espaçamento entre a barra de cores e o gráfico agora pode ser especificado como uma fração da largura da barra de cores, que é um número muito mais significativo do que uma fração da largura da figura.
ATUALIZAR:
Criei um bloco de notas IPython sobre o tópico , onde agrupei o código acima em uma função facilmente reutilizável:
Pode ser usado assim:
fonte
Agradeço todas as respostas acima. No entanto, como algumas respostas e comentários apontou, o
axes_grid1
módulo pode não GeoAxes de endereços, enquanto ajustandofraction
,pad
,shrink
, e outros parâmetros semelhantes podem não necessariamente dar a ordem muito precisa, o que realmente me incomoda. Acredito que dar o que écolorbar
seuaxes
pode ser uma solução melhor para resolver todos os problemas mencionados.Código
Resultado
Mais tarde, acho que
matplotlib.pyplot.colorbar
a documentação oficial também oferece aax
opção, que são eixos existentes que fornecerão espaço para a barra de cores. Portanto, é útil para várias subparcelas, veja a seguir.Código
Resultado
Novamente, você também pode obter efeitos semelhantes especificando cax, uma maneira mais precisa da minha perspectiva.
Código
Resultado
fonte
Quando você cria a
colorbar
tentativa usando os parâmetros de fração e / ou contração.Dos documentos:
fonte
colorbar()
função ou método.Todas as soluções acima são boas, mas eu gosto da @ Steve e da @ bejota as melhores, pois não envolvem chamadas sofisticadas e são universais.
Por universal, quero dizer que funciona com qualquer tipo de eixo, inclusive
GeoAxes
. Por exemplo, você projetou eixos para mapeamento:uma chamada para
falhará com:
KeyException: map_projection
Portanto, a única maneira universal de lidar com o tamanho da barra de cores com todos os tipos de eixos é:
Trabalhe com fração de 0,035 a 0,046 para obter o melhor tamanho. No entanto, os valores para a fração e o paddig precisarão ser ajustados para obter o melhor ajuste para sua plotagem e variarão dependendo se a orientação da barra de cores estiver na posição vertical ou horizontal.
fonte
shrink
parâmetros quando, emfraction
conjuntopad
, não produzem os resultados desejados o suficiente.