Змінити інтервал позначок на осі ділянки?


Відповіді:


95

Існує щонайменше два шляхи досягнення цього в базовому графіку (мої приклади стосуються осі х, але однаково працюють для осі у):

  1. Використовуйте par(xaxp = c(x1, x2, n))або plot(..., xaxp = c(x1, x2, n))для визначення положення ( x1& x2) крайніх позначок та кількості інтервалів між позначками ( n). Відповідно, n+1це кількість намальованих позначок. (Це працює лише в тому випадку, якщо ви не використовуєте логарифмічну шкалу, як див ?par. Поведінка з логарифмічною шкалою .)

  2. Ви можете взагалі придушити креслення осі і додати позначки пізніше за допомогою axis().
    Для придушення креслення осі використовують plot(... , xaxt = "n").
    Тоді телефонуйте axis()з side, atі labels: axis(side = 1, at = v1, labels = v2). З sideпосиланням на боці осі (1 = вісь х, 2 = у-осі), v1будучи вектор , що містить положення тиків (наприклад, c(1, 3, 5)якщо ваш діапазон осі від 0 до 6 , і ви хочете три марки), і v2вектор, що містить мітки для зазначених позначок (має бути такої ж довжини, як v1, наприклад, c("group a", "group b", "group c")). Див. ?axisІ мою оновлену відповідь на допис на stats.stackexchange для прикладу цього методу .


Чи є спосіб контролювати, скільки десяткових знаків використовує R для числових міток. Я щойно спробував мітки = c (0,0,0,5,1,0,1,5,2,0), але на графіку мітки мали значення 0, 0,5, 1, 1,5 і т. Д. Чи є спосіб отримати однакову кількість десяткових знаків на всіх мітках? Я спробував label = round (seq (0,2,0,5), 1), але цілі числа все ще не мали десяткових знаків.
eipi10

2
спробуйте функції formatCабо prettyNumдля створення символьних векторів, яким потрібно передати labels. Напр .:formatC(seq(0,2,0.5), digits = 1, format = "f")
Генрік

1
+1 вже якийсь час шукає, щоб знайти це. Виявляється, хоча nце насправді кількість галочок-1 . Я хотів позначки від 1до 9і повинен був встановити, xaxp = c(1, 9, 8)інакше я не отримав би бажаного результату.
ThomasH

Для мене це не працює par(xaxp..). Це працює лише тоді, коли я поміщаю його всерединуplot(xaxp...)
Даніель Бонетті

31

З базовою графікою найпростіший спосіб - зупинити графічні функції від малювання осей, а потім намалювати їх самостійно.

plot(1:10, 1:10, axes = FALSE)
axis(side = 1, at = c(1,5,10))
axis(side = 2, at = c(1,3,7,10))
box()

Привіт, у мене є дані часу і часу на осі x, (chron). У моєму випадку, я думаю, це повинен бути кращий спосіб, ніж писати рядок із, скажімо, 25 повними датами. Що робити, якщо я хочу, щоб дати були записані вертикально на осі х, я маю на увазі перпендикулярно. ура
скан

1
Подивіться на графічний параметр lasу? Par, який можна додати до виклику axis()та який керує орієнтацією міток. Напр axis(side = 1, at = c(1,5,10), las = 2). Можливо, вам доведеться дослідити, чи існує axis()функція для об'єктів chron, або розглянути можливість використання класів дати R часу, які вже мають axis()функції (наприклад, axis.Date()для класу "" Дата "").
Gavin Simpson

6

У мене є набір даних із часом як вісь х та інтенсивністю як вісь у. Спочатку мені потрібно видалити всі осі за замовчуванням, за винятком міток осей з:

plot(Time,Intensity,axes=F)

Потім я відновлюю елементи сюжету за допомогою:

box() # create a wrap around the points plotted
axis(labels=NA,side=1,tck=-0.015,at=c(seq(from=0,to=1000,by=100))) # labels = NA prevents the creation of the numbers and tick marks, tck is how long the tick mark is.
axis(labels=NA,side=2,tck=-0.015)
axis(lwd=0,side=1,line=-0.4,at=c(seq(from=0,to=1000,by=100))) # lwd option sets the tick mark to 0 length because tck already takes care of the mark
axis(lwd=0,line=-0.4,side=2,las=1) # las changes the direction of the number labels to horizontal instead of vertical.

Отже, at = c(...)вказується набір позицій для поставлення позначок. Тут я хотів би поставити позначки в 0, 100, 200, ..., 1000. seq(from =...,to =...,by =...)дає мені вибір меж та приростів.


3

І якщо ви не хочете, щоб R додавав десяткові числа або нулі, ви можете зупинити його від малювання осі x або осі y або обох, використовуючи ... axt. Потім ви можете додати власні галочки та мітки:

plot(x, y, xaxt="n")
plot(x, y, yaxt="n")
axis(1 or 2, at=c(1, 5, 10), labels=c("First", "Second", "Third"))

Звичайно, ви можете програмно вмикати та вимикати це за допомогою змінної за flagдопомогою yaxt=flag АЛЕ фокус полягає в тому, що якщо ви хочете увімкнути стандартні мітки, то встановіть, flag <- "s"а якщо ви не хочете використовувати стандартні мітки flag <- "n" (Додаючи це, тому що мені знадобився поки знайти "s")
Клем Ван,

3

Я щойно виявив пакет Hmisc :

Містить багато функцій, корисних для аналізу даних, графіки високого рівня, утилітних операцій, функцій для обчислення розміру та потужності вибірки, імпорту та анотування наборів даних, введення відсутніх значень, вдосконаленого створення таблиць, кластеризації змінних, маніпулювання рядками символів, перетворення об'єктів R у LaTeX і html-код, і перекодування змінних.

library(Hmisc)    
plot(...)
minor.tick(nx=10, ny=10) # make minor tick marks (without labels) every 10th
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.