Пометить каждый тик по оси X на блокпосте - PullRequest
0 голосов
/ 30 марта 2020

Я хотел бы удалить все метки тика n-й оси x из geom_boxplot (ggplot).

Например, взять этот фиктивный фрейм данных:

Lat <- c(rep(50.70,3), rep(51.82,3), rep(52.78,3), rep(56.51,3))
y <- c(seq(1,2, by=0.5), seq(1,3, by=1), seq(2,6,by=2), seq(1,5,by=2))
df <- as.data.frame(cbind(Lat, y))

Я могу создать ggplot коробочный график следующим образом:

box_plot <- ggplot(df, aes(x=as.factor(Lat), y=y))+
  geom_boxplot()+
  labs(x="Latitude")+
  scale_y_continuous(breaks = pretty_breaks(n=6)) +
  theme_classic()
box_plot

Однако я хотел бы удалить ярлыки из двух средних коробок.

Я знаю, что могу добиться этого, изменив ярлыки просто быть пустым (как показано ниже). Тем не менее, мой реальный фрейм данных имеет более 4 тактов, так что это займет много времени, не говоря уже о вероятности человеческой ошибки!

box_plot2 <- ggplot(df, aes(x=as.factor(Lat), y=y))+
  geom_boxplot()+
  labs(x="Latitude")+
  scale_y_continuous(breaks = pretty_breaks(n=6)) +
  scale_x_discrete(labels=c("50.70", " ", " ", "56.51"))+
  theme_classic()
box_plot2

Есть ли способ создать вышеприведенный график без необходимости вручную устанавливать метки ?

Например, пометить каждый n-тик на оси x?

Заранее спасибо!

1 Ответ

1 голос
/ 30 марта 2020

Это может быть достигнуто, как. В качестве примера я привожу «каждый» третий тик. Основная идея c состоит в том, чтобы добавить индекс для уровней факторов. Этот индекс может затем использоваться для указания разрывов или тиков, которые каждый хочет построить. Попробуйте это:

Lat <- c(rep(50.70,3), rep(51.82,3), rep(52.78,3), rep(56.51,3))
y <- c(seq(1,2, by=0.5), seq(1,3, by=1), seq(2,6,by=2), seq(1,5,by=2))
df <- as.data.frame(cbind(Lat, y))

library(ggplot2)
library(scales)
library(dplyr)

df <- df %>% 
  mutate(Lat1 = as.factor(Lat),
         Lat1_index = as.integer(Lat1))

# Which ticks should be shown on x-axis
breaks <- df %>% 
  # e.g. plot only every third tick
  mutate(ticks_to_plot = Lat1_index %% 3 == 0) %>% 
  filter(ticks_to_plot) %>% 
  pull(Lat1)

box_plot2 <- ggplot(df, aes(x=Lat1, y=y))+
  geom_boxplot()+
  labs(x="Latitude")+
  scale_y_continuous(breaks = pretty_breaks(n=6)) +
  scale_x_discrete(breaks = breaks)+
  theme_classic()
box_plot2

Создано в 2020-03-30 пакетом Представить (v0.3.0)

...