Удаление границ на графиках R для достижения оси Tufte

18

Рассмотрим следующий график:

x <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100)+100

par(mar=c(5,5,5,5))

plot(x,y1,pch=0,type="b",col="red",yaxt="n",ylim=c(-8,2),ylab="")
axis(side=2, at=c(-2,0,2))
mtext("red line", side = 2, line=2.5, at=0)

par(new=T)
plot(x,y2,pch=1,type="b",col="blue",yaxt="n",ylim=c(98,108), ylab="")
axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
mtext("blue line", side=4, line=2.5, at=100)

Как я могу удалить автоматически сгенерированные границы и сохранить только линии осей, чтобы добиться стиля Tufte?

Уго Серено Феррейра
источник
5
Посмотрите на btyаргумент ?par, например bty="n",. Вы можете передать этот аргумент в своем звонке plot.
Glen_b
3
Кстати, Туфте пошел дальше: он показал, как в некоторых случаях стирание частей самих осей дает дополнительную информацию, эффективно превращая каждую ось в визуальное отображение диапазона данных. Вдохновленный этим, в 1989 году я написал программное обеспечение для создания небольших множественных сюжетов, которые включали этот дизайн (среди многих других, вдохновленных группой Туфта и Билла Кливленда) и впоследствии создали несколько миллионов таких графиков. Когда вам нужно добывать столько данных визуально, такие принципы действительно работают.
whuber
@whuber По сути, вы заменяли оси своего рода ковриком?
Серебряная
2
@ Серебро Рисование сюжета коврика - это отдельная проблема, и я тоже это сделал. Однако даже при отсутствии коврика вы можете выбрать, где остановиться и начать рисовать каждую ось. Когда вы начинаете его с минимума и останавливаете его на максимуме, вы получаете визуальное представление всего диапазона каждого предельного распределения данных.
whuber
2
@whuber Спасибо, теперь я понимаю, что вы имели в виду - Туфте называет это «рамкой диапазона» (и предлагает не только останавливать линии там в крайних точках, но и использовать заключительные метки для указания их значений - что он вызывает "диапазон-рамка с метками диапазона"). Для более поздних читателей, которым нужна ссылка, это из раздела «Визуальное отображение количественной информации», глава 7 («Многофункциональные графические элементы»). Поскольку это очень популярная тема, было бы неплохо увидеть добавленную иллюстрацию (и учитывая вопрос, немного кода R) того, что на самом деле может означать «ось Туфте».
Серебряная

Ответы:

5

Это просто сделать, вы просто включите аргумент axes=FALSE. Рассмотреть возможность:

x  <- 1:100
y1 <- rnorm(100)
y2 <- rnorm(100) + 100

windows()
  par(mar=c(5,5,5,5))
  plot(x, y1, pch=0, type="b", col="red", yaxt="n", ylim=c(-8,2), ylab="", axes=F)
  axis(side=2, at=c(-2,0,2))
  mtext("red line", side = 2, line=2.5, at=0)

  par(new=T)
  plot(x, y2, pch=1, type="b", col="blue", yaxt="n", ylim=c(98,108), ylab="", axes=F)
  axis(side=4, at=c(98,100,102), labels=c("98%","100%","102%"))
  mtext("blue line", side=4, line=2.5, at=100)

введите описание изображения здесь

Обратите внимание, что это работает одинаково хорошо для гистограмм:

windows()
hist(y1, axes=F)

введите описание изображения здесь

Gung - Восстановить Монику
источник
4

Если вы используете

par(bty = 'n') 

Перед тем как позвонить в сюжет, это будет исправлено для зоопарка Это может также исправить это для множества ситуаций, когда оно не подходит для команды построения.

(Проверьте параметр bty в справке par () для других типов кадров для графика)

Иоанн
источник
0

Я отвечаю на более общий вопрос об удалении границ на участках без ссылки на Tufte.

Для гистограммы я не нашел, что btn = 'n' избавился от границы.

Решение, которое работает для гистограмм и должно работать для всех типов графиков, состоит в том, чтобы установить тип линии для границы невидимым: lty = "blank"

PeterVermont
источник