Boa tarde meu povo!
Lucas, a sua dica de como ordenar os estados pela mediana foi crucial pro desenrolar dessa novela que foi o desafio que eu mesmo propus.
Organizei os estados com base nisso, como vc sugeriu, utilizei do parâmetro order
que o Ronald sugeriu (obrigado Ronald) e...
Funcionou! Sucesso!!!
Segue o código para quem se interessar...
# Obtendo a lista dos estados ordenados pela mediana da renda
mediana_estados = dados.query('Renda < 10000').groupby('UF')['Renda'].median()
mediana_estados_ordenado = list(mediana_estados.sort_values().index)
# Obtendo uma lista com os nomes dos estados ordenados pela mendiana da renda
# Tive que criar esta lista para poder ordenar os labels junto aos box-plots
nomes_uf_ordenados_por_mediana = []
for nome in mediana_estados_ordenado:
nomes_uf_ordenados_por_mediana.append(uf[nome])
# Selecionando os dados
box_plot_renda_por_UF = sns.boxplot(
x = 'Renda',
y = 'UF',
#hue = 'Sexo',
data = dados.query('Renda < 10000'),
orient = 'h',
order = mediana_estados_ordenado)
# Ajustando o tamanho da imagem
box_plot_renda_por_UF.figure.set_size_inches(20, 12)
# Definindo o título do gráfico
box_plot_renda_por_UF.set_title(
'Box-plot da renda por ESTADOS (UF)',
fontsize = 20)
# Configurando o eixo x
box_plot_renda_por_UF.set_xlabel('Renda (R$)', fontsize = 16)
# Configurando o eixo y
box_plot_renda_por_UF.set_ylabel('Estados', fontsize = 16, )
box_plot_renda_por_UF.set_yticklabels(
nomes_uf_ordenados_por_mediana,
fontsize = 12)
# Plotar o gráfico
box_plot_renda_por_UF
E, no desafio de plotar em ordem alfabética dos nomes dos estados, primeiramente, criei uma lista com o nome dos estados e organizei em ordem alfabética:
# Obtendo a lista dos nome dos estados em ordem alfabética
nomes_uf_ordem_alfabetica = list(uf.values())
nomes_uf_ordem_alfabetica.sort()
nomes_uf_ordem_alfabetica
Essa parte foi tranquilo...
E joguei essa lista como parâmetro lá no método .set_yticklabels()
. Assim, os labels estão em ordem alfabética, mas os box-plots do gráfico ainda não seguem a mesma ordem.
Eu precisava de uma lista com os códigos dos estados. Mas essa lista deveria estar na mesma ordem dos nomes dos estados (que já estavam em ordem alfabética...)
E aí foi a parte mais difícil para mim, pois não achei na documentação um método que me desse as keys
de um dicionário a partir dos values
do mesmo.
Botei a cabeça pra torrar uns neurônios e depois de um tempo considerável (3 dias) tentando, bolei uma lógica que fizesse isso para mim... E consegui! (tô felizão por isso! =D)
#Obtenedo uma lista com os códigos dos estados na mesma ordem alfabética do nomes do estados
lista = list(uf.items())
lista_codigos = []
for nome in nomes_uf_ordem_alfabetica:
for key, value in lista:
if value == nome:
lista_codigos.append(key)
lista_codigos
Aí corri pro abraço... Só coloquei essa lista no parâmetro order
da função .boxplot()
(valeu de novo Ronald)...
# Selecionando os dados
box_plot_renda_por_UF = sns.boxplot(
x = 'Renda',
y = 'UF',
data = dados.query('Renda < 10000'),
orient = 'h',
order = lista_codigos)
# Ajustando o tamanho da imagem
box_plot_renda_por_UF.figure.set_size_inches(20, 12)
# Definindo o título do gráfico
box_plot_renda_por_UF.set_title(
'Box-plot da renda por ESTADOS (UF)',
fontsize = 20)
# Configurando o eixo x
box_plot_renda_por_UF.set_xlabel('Renda (R$)', fontsize = 16)
# Configurando o eixo y
box_plot_renda_por_UF.set_ylabel('Estados', fontsize = 16, )
box_plot_renda_por_UF.set_yticklabels(
nomes_uf_ordem_alfabetica,
fontsize = 12)
# Plotar o gráfico
box_plot_renda_por_UF
e funcionou!!!
Valeu galera! Ajudou muito!! Mais um desafio concluído!!!
Até a próxima...