Разметить столбец по количеству значений положительными и отрицательными столбцами - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть барплот (stat = идентичность), и я хотел бы пометить столбцы с помощью N (количество значений каждого бара). У меня проблема с положительными и отрицательными барами. Одним из решений может быть создание надписей положительных столбцов в белом цвете с надписью вверху.

ggplot(AP_Group, aes(Labels, Mean))+
  geom_bar(stat = "identity") + 
  theme_minimal() + 
  ggtitle(expression(paste("Air Pressure - C_PM"[1], " - All Season"))) + 
  xlab("Air Pressure [hPa]") +
  ylab("Shap Value") +
  geom_text(aes(label=N), color="black", size=3.5, vjust = 1.8) +
  theme(plot.title = element_text(color="black", size=14, margin = margin(t = 0, r = 0, b = 15, l = 0)),
        axis.title.x = element_text(color="black", size=14, margin = margin(t = 15, r = 0, b = 0, l = 0)),
        axis.title.y = element_text(color="black", size=14, margin = margin(t = 0, r = 15, b = 0, l = 0))) +
  theme(plot.title = element_text(hjust=0.5))

enter image description here

Ответы [ 2 ]

3 голосов
/ 08 ноября 2019

Один из способов сделать это - сделать vjust эстетически подобным этому ...

df <- tibble(x = c(1, 2), y = c(-1, 2)) #sample data

df %>% ggplot(aes(x=x, y=y)) +
  geom_bar(stat = "identity") +
  geom_text(aes(label = y, vjust = -sign(y)))

enter image description here

1 голос
/ 08 ноября 2019

Если вы действительно хотите условно закрасить их знаком, вот возможное решение:

# fake df
df <- data.frame(Mean = c(1,3,-5),Labels = c("a","b","c"))
# here you decide to put white or black conditionally
df$color <- ifelse(df$Mean > 0, 'white','black')

library(ggplot2)
ggplot(df, aes(Labels, Mean))+
  geom_bar(stat = "identity") + 
  theme_minimal() + 
  ggtitle(expression(paste("Air Pressure - C_PM", " - All Season"))) + 
  xlab("Air Pressure [hPa]") +
  ylab("Shap Value")  +
  # here in aes() you put the color made
  geom_text(aes(label=Mean, color=color), size=3.5, vjust = 1.8) +
  # here you define the colors (it means "white" could be the color you want)
  scale_color_manual(values = c("black" = "black", "white" = "white"))+
  # you can remove the useless legend
  theme(legend.position="none")

enter image description here

...