1
resposta

Valores dos Eixos e Legendas

Estou fazendo os boxplot e as partes de mostrar quais são os valores para cor, anos de estudo e UF estão sendo bem complicadas. Isso porque eu não quero criar novas colunas no df com essas legendas. O que eu queria saber é, se na hora de montar o boxplot eu consigo fazer essas alterações. Como exemplo, esse é o boxplot que estou tentando fazer da renda por UF:

ax = sns.boxplot(x = 'Renda', y = 'UF', data = data.query('Renda < 10000'), orient = 'h')

ax.figure.set_size_inches(14,6)
ax.set_title('Renda por UF', fontsize = 18)
ax.set_xlabel('R$', fontsize = 14)
ax.legend(loc = 'best')
ax

Quando plot, no eixo y aparecem os valores designados a cada UF e não o nomes das mesmas. O que eu quero é justamente saber como mudo isso. Eu já tenho o dicionário uf que tem as conversões mas não sei aplicá-lo para fazer essa mudança.

Além disso, no caso do boxplot com a cor, por exemplo o problema muda de lugar. Nesse caso, o que eu quero é mudar os nomes na legenda criada pelo parâmetro hue. Aqui o código:

ax = sns.boxplot(x = 'Renda', y = 'Sexo', data = data.query('Renda < 10000'), orient = 'h', hue = 'Cor')

ax.figure.set_size_inches(14,6)
ax.set_title('Renda', fontsize = 18)
ax.set_xlabel('R$', fontsize = 14)
ax.legend(loc = 'best')
ax

Na legenda do parâmetro hue feita pelo programa irão aparecer os valores 0, 2, 4, etc... e eu quero que apareçam as cores relacionadas a eles. Como no caso de cima, eu tenho o dicionário com as relações de cor.

1 resposta

Olá Dexter, tudo bem ? Espero que sim.

Desculpa pela demora do retorno.

Em ambos as casos solucionamos utilizando o método set_yticklabels, com ele podemos passar uma lista com os labels que queremos usar no eixo y.

No primeiro caso passamos para ele essa lista utilizando um List Comprehensions para percorrer o dicionario de UF que você tem.

ax = sns.boxplot(x = 'Renda', y = 'UF', data = dados.query('Renda < 10000'), orient = 'h')

ax.figure.set_size_inches(14,6)
ax.set_title('Renda por UF', fontsize = 18)
ax.set_xlabel('R$', fontsize = 14)
ax.legend(loc = 'best')
ax.set_yticklabels([key for key in uf.values()], fontsize=12)    # Configurando o label de cada categoria do eixo Y
ax

No segundo caso por ter menos valores podemos escreve na mão essa lista ['Masculino','Feminino'] :

ax = sns.boxplot(x = 'Renda', y = 'Sexo', data = dados.query('Renda < 10000'), orient = 'h', hue = 'Cor')

ax.figure.set_size_inches(14,6)
ax.set_title('Renda', fontsize = 18)
ax.set_xlabel('R$', fontsize = 14)
ax.legend(loc = 'best')
ax.set_yticklabels(['Masculino','Feminino'], fontsize=12) 
ax

Já para adicionar a legenda vamos utilizar o legend e o get_legend_handles_labels:

handles, _ = ax.get_legend_handles_labels()
ax.legend(handles, ['Indígena', 'Branca', 'Preta', 'Amarela', 'Parda', 'Sem declaração'], fontsize=12)

Novamente vamos utilizar as labels que cores que estão no handle e combinar com a lista com as labels que queremos utilizar.

O código completo fica assim:

ax = sns.boxplot(x = 'Renda', y = 'Sexo', data = dados.query('Renda < 10000'), orient = 'h', hue = 'Cor')

ax.figure.set_size_inches(14,6)
ax.set_title('Renda', fontsize = 18)
ax.set_xlabel('R$', fontsize = 14)
#ax.legend(loc = 'best')
ax.set_yticklabels(['Masculino','Feminino'], fontsize=12) 
handles, _ = ax.get_legend_handles_labels()
ax.legend(handles, ['Indígena', 'Branca', 'Preta', 'Amarela', 'Parda', 'Sem declaração'], fontsize=12)

ax

Espero ter ajudado, qualquer duvida não hesite em perguntar.

Bons Estudos.

: )