Closed cavalcanti1985 closed 1 year ago
I changed the function "theme_ipea" to "ipea_style" and now called a generalist function "ipea_theme" to group all the arguments (ipea_style, scale_ipea, ipea_text).
An reproduce code:
graph <- abjData::pnud_muni %>%
group_by(ano) %>%
dplyr::summarise(espvida = mean(espvida),
rdpc = mean(rdpc))
ggplot(data=graph, aes(x=as.character(ano), y=espvida, color = espvida, group = 1)) +
geom_line() +
geom_point() +
xlab('Ano') +
ylab('Expectativa de vida') +
theme_ipea(type = 'continuous', style = 'color',
label = 'espvida',
legend.position = 'none') +
ggtitle(label = "Expectativa de vida", subtitle = "Brasil (%)")
Ok, mas como define a paleta de cores? E se o gráfico precisar definir paleta de color
e de fill
? Eu nao sei se seria uma boa ter uma unica função theme_ipea()
que junta tudo. Isso é inclusive contra-intuitivo porque é diferente de como o padrão do ggplot funciona.
Meus two cents. Faria mais sentido ser:
theme_ipea()
para definição de fonte, padrão de eixos, ticks, grade, posição de legenda etc.scale_color_ipea()
para definição de cores usando 'color'scale_fill_ipea()
para definição de cores usando 'fill'As funções scale_color_ipea()
e scale_fill_ipea()
poderiam ser construidas como wrap de scale_*_brewer()
. Deixaria bem mais facil manutenção e consistencia, a gente poderia deixar opções de paletas predefinidas entre continua e discreta conforme as paletas definidas pelo editorial.
Exemplo que eu falei acima:
library(ggplot2)
data("mtcars")
# cria funcao scale_color
scale_color_ipea <- function(continua = TRUE,
type = 'seq',
palette = 1,
direction = 1, ...){
if(isTRUE(continua)){
cores <- ggplot2::scale_fill_distiller (
type = type,
palette = palette,
direction = direction,
aesthetics = "colour", ...)
}
if(isFALSE(continua)){
cores <- ggplot2::scale_color_brewer(
type = type,
palette = palette,
direction = direction,
aesthetics = "colour", ...)
}
return(cores)
}
# figura com core continua
ggplot(data = mtcars) +
geom_point(aes(x = disp, y = hp, color= disp)) +
scale_color_ipea(continua = T, palette = 'Blues')
# figura com core discreta
ggplot(data = mtcars) +
geom_point(aes(x = disp, y = hp, color= as.factor(gear))) +
scale_color_ipea(continua = F, palette = 'Blues')
A sua sugestão é como está sento feito atualmente. A única diferença é que o argumento da 'continua' você colocou dentro da função do scale_*_ipea
Vai ficar mais claro no comparativo do graf1 e graf2
# Exemplo 4 - Mapa do Brasil -------------
mun = geobr::read_municipality()
uf = geobr::read_state()
pnud = abjData::pnud_muni %>%
subset(ano == 2010) %>%
select(ano,code_muni = codmun7,e_anosestudo,rdpc)
df = left_join(mun, pnud)
a = subset(df,abbrev_state == "PB")
graf1 <- ggplot(data = a, aes(fill = e_anosestudo)) +
geom_sf() +
#geom_sf(data = uf, color = "black", fill = NA) +
ggtitle("Anos de estudo", "Em anos") +
xlab("")+ylab("") +
ipea_style(axis = "full", text = F) +
scale_fill_continuous_ipea( options = c("ipea1"))
graf1
# Caso deseja mudar a variação da escala
graf2 <- ggplot(data = df, aes(fill = e_anosestudo)) +
geom_sf(color = NA) +
geom_sf(data = uf, color = "black", fill = NA) +
ggtitle("Anos de estudo", "Em anos") +
xlab("")+ylab("") +
theme_ipea(axis = "none", text = F,
show.limits = T,name = "Anos de estudo",
type = 'continuous', style = 'fill')
graf2
Sobre o theme_ipea
escolher a paleta, seria só colocar options = c("ipea1")
Oi Pedro. Me parece que são coisas bem distintas.
Se você reparar na estrutura interna da função atual do pacote scale_fill_continuous_ipea()
, você vai ver que um tanto diferente da função scale_color_ipea()
que propus acima. A função atual parece bem mais 'complicada' internamente e colocar como opção varias paletas de cores que nao são muito intuitivas. Convenhamos, qual é a cor da paleta "ipea1"? rsrsrsrs
mas enfim, desculpa cair de paraquedas aqui. Se voce e @cavalcanti1985 quiserem, podemos fazer uma reunião para discutir a arquitetura de como o pacote deve funcionar, as funções que fazem sentido existir ou nao etc etc.
A ideia de ter várias paletas seria caso o usuário quisesse escolher outras opções além do padrão, mas concordo que não faria tanto sentido. A ideia seria o uso mais frequente do ipea1, ipea2 e ipea3 (que tbm poderíamos escolher outras cores).
A cor da paleta acredito que poderia alterar, mas o que tinha pensado inicialmente era selecionar as cores que mais se adequem ao padrão do ipea. Caso achem melhor simplesmente usar o 'blues' posso alterar isso também.
my two cents: eu acho que o usuario espera algo como:
d %>% ggplot(....) + geom_*() + theme_classic
o theme_classic
, escolhe tudo pra mim, fonte, tags de eixo, paleta de cores (sejam cores discretas ou continua).
Eu esperava que o theme_ipea fizesse o mesmo tem ter que usar opcao nenhuma.
Se alem disso voce quiser expor ao usuario funcoes como "scale_fill_continuous_ipea" (e/ou como argumentos de theme_ipea), e diferentes paletas Ipea, tudo bem.
mas o mais importante na minha opiniao e' para este pacote ter alguma chance de pegar, o usuario nao ter que fazer nada. So digita + theme_ipea
e o grafico ja se aproxima ao maximo do que seria o padrao do Ipea.
Off topic: E acho que este exercicio pode sevir para um debate com o editorial para abolir esta paleta de cores especifica do Ipea, em prol das paletas feitas por experts. Mas enfim, seja qual for o consenso, precisamos automatiza-lo ao maximo
Meu ponto é que o no ggplot2, as paletas de cores dos dados não são definidas dentrod o theme_
. Qualquer theme_classic()
, theme_void()
, theme_map()etc etc ainda exige que o usuario defina a pela de cores dos dados com
scalecolorou
scalefill`.
ps. tambem acho as paletas 'default' do editorial do Ipea muito muito ruins.
Saquei. Eu to na cabeça algo como isso aqui https://r-charts.com/ggplot2/themes/ nos varios exemplos acho que as paletas mudam. mas, como voce diz Rafa, acho que talvez isso nao seja verdade para os themes que vem no proprio ggplot2 (classi,bw,minimal),
Ah, entendi melhor que você quer dizer. Esses exemplos são bacanas. Uma alternativa é o que faz o pacote {ggsci}.
Mas como eu comentei com o pessoal, a paleta de cores dos TDs é muito ruim. A sugestão de deixar scale_color_ipea(palette = c("blues1", "blues2", "blues3"))
seria uma forma de dar liberdade para o pesquisador escolher de um leque de opções de paletas aceitas pelo editorial aquela que ele achar que fica melhor para a figura.
Is it possible to include the Ipea color palette in the theme_ipea function?