Видалення меж на R ділянках для досягнення осі Туфте


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
FWIW, Tufte пішов далі: він показав, як в деяких випадках стирання частин самих осей надає додаткову інформацію, ефективно перетворюючи кожну вісь у візуальне відображення діапазону даних. Натхненний цим, у 1989 році я написав програмне забезпечення для створення невеликих численних сюжетів, які включали цей дизайн (серед багатьох інших, натхненних групою Туфте та Білла Клівленда), а згодом створили кілька мільйонів такої графіки. Коли вам доведеться видобувати стільки даних візуально, такі принципи дійсно працюють.
whuber

@whuber Ефективно, ви замінювали оси на якусь сюжетну килим?
Срібна рибка

2
@Silver Малювання сюжету килимків - це окреме питання - і я теж це робив. Однак навіть за відсутності сюжету килимків ви можете вибрати, де зупинитися, і почати малювати кожну вісь. Коли ви запускаєте його на мінімальному рівні і зупиняєте його на максимумі, ви досягли візуального зображення всього спектру кожного граничного розподілу даних.
whuber

2
@whuber Спасибі, тепер я розумію, про що ви мали на увазі - Tufte називає це "рамкою діапазону" (і пропонує не тільки зупиняти рядки на екстремалі, але і використовувати остаточні мітки, щоб вказати їх значення - що він називає "діапазон діапазону з позначками діапазону"). Для пізніших читачів, які хочуть отримати посилання, це розділ із візуального відображення кількісної інформації, глава 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

Я відповідаю на більш загальне питання про усунення кордонів у сюжетах, без посилання на Туфте.

Для гістограми я не виявив, що btn = 'n' позбувся кордону.

Рішення, яке працює для гістограм і має працювати для всіх типів графіків, - встановити тип рядка для межі невидимим: lty = "blank"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.