Удаление границ на графиках 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)

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


4

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

par(bty = 'n') 

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

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


0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.