Tenho as duas perguntas a seguir: (1) Quero que o rótulo fique entre dois ticks. Meu pensamento original era adicionar os ticks secundários e remover os ticks primários, mas axis.minor.ticks.length.y não funciona (2) Adicione pontos stat_summary na legenda Muito obrigado por responder suas perguntas!
Aqui está o código e a figura:
library("ggplot2")
dt <- data.frame(
ca = rep(c("Oesophageal cancer", "Gastric cancer", "Colorectal cancer"), 3),
var1 = c(1:3, -4:-6, 7:9),
var2 = rep(LETTERS[1:3], 3)
)
dt %>%
ggplot(aes(var1, ca, fill = var2))+
geom_bar(stat="identity", width=0.8)+
stat_summary(fun=sum, geom="point",colour="grey40", fill="grey40", shape=20, size=2)+
geom_vline(xintercept=0, colour="grey30", linetype="dotted")+
theme(
axis.minor.ticks.length.y = rel(0.5)
)
Objetivo: Alterar o estilo da Figura 1 para a Figura 2
Você precisa converter para uma escala contínua para usar marcas menores, já que não há quebras menores em um eixo discreto:
Até onde eu sei, o ggplot2 não tem a funcionalidade de adicionar ticks secundários entre quebras de eixo para escalas discretas. Mas graças à flexibilidade do ggplot2, podemos adicioná-los manualmente sem muitos problemas, apenas desenhando algumas linhas (segmentos) apenas no eixo vertical, e adicionando uma configuração usando
coord_cartesian
para que os elementos gráficos fora dos limites do gráfico não sejam removidos.Para posicionar os ticks no eixo vertical de uma variável discreta entre cada rótulo de texto, temos que criar uma sequência de números igual às quebras de eixo menos 0,5, porque valores discretos mapeados para um eixo têm uma posição vertical numérica, então subtrair 0,5 irá dê-nos a posição intermediária entre cada rótulo.
Para desenhar fora dos limites do gráfico, temos que adicionar limites rígidos para o eixo x que nos permitirá desenhar elementos no gráfico sem esticar o eixo vertical para ajustá-los, porque por padrão o ggplot quer todos os elementos plotados dentro da área do gráfico, e esticará os eixos para encaixá-los. Fazemos isso no
limits_x_axis
objeto.