Como posso remover o topo e eixo direito em matplotlib?
-
06-09-2019 - |
Pergunta
Em vez do padrão "encaixotado" estilo eixo Quero ter apenas o eixo esquerdo e inferior, ou seja:.
+------+ |
| | |
| | ---> |
| | |
+------+ +-------
Isso deve ser fácil, mas eu não consigo encontrar as opções necessárias na documentação.
Solução
Esta é a solução sugerida Matplotlib 3 a partir do site oficial AQUI :
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 100)
y = np.sin(x)
ax = plt.subplot(111)
ax.plot(x, y)
# Hide the right and top spines
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
# Only show ticks on the left and bottom spines
ax.yaxis.set_ticks_position('left')
ax.xaxis.set_ticks_position('bottom')
plt.show()
Outras dicas
Como alternativa, este
def simpleaxis(ax):
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
ax.get_xaxis().tick_bottom()
ax.get_yaxis().tick_left()
parece conseguir o mesmo efeito em um eixo, sem perder o apoio etiqueta girada.
(Matplotlib 1.0.1; solução inspirado por este ).
[editar] matplotlib agora (2013-10) na versão 1.3.0, que inclui este
Essa capacidade foi realmente acabou de adicionar, e você precisa da versão Subversion para ele. Você pode ver o código de exemplo aqui .
Estou apenas a atualização para dizer que há um melhor exemplo online agora. Ainda precisa a versão Subversion no entanto, não houve uma liberação com isso ainda.
[editar] Matplotlib 0.99.0 RC1 acaba de ser lançado e inclui esta capacidade.
Se você não precisa de carrapatos e tal (por exemplo, para traçar ilustrações qualitativos) você também pode usar essa solução rápida:
Adicione o eixo invisível (por exemplo, com plt.gca().axison = False
) e, em seguida, levá-los manualmente com plt.arrow
.
(Este é mais um comentário extensão, além das respostas abrangentes aqui.)
Note que podemos esconder cada um destes três elementos de forma independente um do outro:
-
Para ocultar a fronteira (aka "coluna vertebral"):
ax.set_frame_on(False)
ouax.spines['top'].set_visible(False)
-
Para ocultar os carrapatos:
ax.tick_params(top=False)
-
Para ocultar os rótulos:
ax.tick_params(labeltop=False)
Biblioteca Seaborn tem esta embutido com a função despine ().
Apenas add:
import seaborn as sns
Agora crie seu gráfico. E adicionar no final:
sns.despine()
Se você olhar para alguns dos valores de parâmetro padrão da função que remove a parte superior e espinha direita e mantém a parte inferior e da coluna esquerda:
sns.despine(top=True, right=True, left=False, bottom=False)
Confira mais documentação aqui: https://seaborn.pydata.org/generated/seaborn.despine.html
Se você precisará removê-lo de todas as suas parcelas, você pode remover espinhos em configurações de estilo (folhas de estilo ou rcParams). Por exemplo:
import matplotlib as mpl
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
Se você quiser remover todos os espinhos:
mpl.rcParams['axes.spines.left'] = False
mpl.rcParams['axes.spines.right'] = False
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.bottom'] = False