Подтвердить что ты не робот

R-графики: создание горизонтальных штриховых линий Tufte

Как мы можем реплицировать неявные горизонтальные линии Tufte в R?

Tufte bars

Например, хорошая стартовая точка:

library(ggplot2)    
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw()

Удаление границы должно быть простым. Критический момент, накладывающий горизонтальную линию на решетки, для меня непонятен.

Я представляю себе два подхода:

  • Ad-hoc решение для данного конкретного примера
  • Предложение о том, как включить его в тему
4b9b3361

Ответ 1

Не большое дополнение к ответу @Andrie, но вы можете воспользоваться преимуществом пакета ggthemes, чтобы сделать графики Tufte-sque с ggplot2. Ниже я использую theme_tufte, меняю шрифт с помощью пакета extrafont и использую opts для точной настройки всех других визуальных функций:

library(ggthemes)
library(extrafont)
ggplot(msleep, aes(x=order)) + stat_bin(width=0.6, fill="gray") + 
  theme_tufte(base_family="GillSans", base_size=16, ticks=F) +
  theme(axis.line=element_blank(), axis.text.x=element_blank(),
        axis.title=element_blank()) +
  geom_hline(yintercept=seq(5, 20, 5), col="white", lwd=1.2)

enter image description here

Ответ 2

В принципе, это прямолинейно - все, что вам нужно сделать, это рисовать белые горизонтальные линии в новом слое. Вы можете использовать geom_hline для этого:

library(ggplot2)    
ggplot(msleep, aes(x=order)) + stat_bin() + theme_bw() +
  geom_hline(yintercept=seq(5, 20, 5), col="white")

enter image description here

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

(Я хотел бы, чтобы меня оправдали.)

Ответ 3

Там также довольно простое базовое решение R для этого:

tmp <- table(msleep$order)
barplot(tmp, col='black', las=3)
abline(h=seq(5, max(tmp), by=5), col='white', lwd=2)

enter image description here