В ggplot, как сделать panel.grid.major поверх барплота? - PullRequest
0 голосов
/ 26 июня 2019

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

enter image description here

Я создал это с помощью geom_segment, но недостатком является то, что мне нужно установить высоты, на которых сегменты находятся вручную, - но я бы хотел, чтобы это было установлено автоматически на высоте тиков.

df <- data.frame(id=1:5, val=abs(rnorm(5)))

ggplot(df, aes(id, val)) + geom_bar(stat="identity") + 
 theme_tufte() + 
 geom_segment(x=-Inf, y=0:4, xend=Inf, yend=0:4, color="white")

1 Ответ

1 голос
/ 26 июня 2019

Вы можете получить значение позиций тикового прорыва от layout$panel_params[[1]]$y.major_source.Тогда вы можете просто использовать горизонтальную линию в этих точках.Для вашего примера это будет выглядеть примерно так:

library(ggthemes)
df <- data.frame(id=1:5, val=abs(rnorm(5)))

myPlot <- ggplot() + geom_bar(data = df, aes(x = id, y = val), stat="identity") + 
  theme_tufte()

myTuftePlot <- ggplot_build(myPlot)
y.ticks <- myTuftePlot$layout$panel_params[[1]]$y.major_source
myPlot + geom_hline(aes(yintercept = y.ticks), colour = 'white')
...