Как добавить месяцы и годы вместо чисел в точечной решетке? - PullRequest
1 голос
/ 04 июня 2019

Я относительно новичок в R и сталкиваюсь с проблемой всякий раз, когда пытаюсь добавить месяцы и год к своему точечному графику. Когда я запускаю свои данные, используя решетку, я делаю это так:

require(lattice)
data_conrad = read.csv("/Users/Danniel/Desktop/conrad_made_up.csv", header = TRUE)
data_conrad
lattice::dotplot(data_conrad$Patient ~ data_conrad$Value | data_conrad$Year, 
        data=data_conrad, xlab="Time", ylab="Patient", scales= list(x = list(at = seq(from = 1, to = 12, by =1))))

This is how my plot looks like after running the code

Однако я пытаюсь получить фактические месяцы вместо (1,2,3,4 ... 12), и я пытаюсь заменить "Data_Conrad$Year" фактическим годом (2010, 2011, 2012). ), однако у меня проблемы с этим.

После ввода dput(data_conrad), вывод от R будет следующим:

structure(list(Patient = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 
7L, 8L, 9L, 10L, 1L, 2L, 3L, 4L, 5L, 6L, 8L, 9L, 10L, 1L, 6L, 
8L), .Label = c(" 1", " 2", " 3", " 4", " 5", " 6", " 7", " 8", 
" 9", "10"), class = "factor"), Month = structure(c(5L, 4L, 6L, 
8L, 1L, 3L, 2L, 2L, 4L, 10L, 1L, 7L, 11L, 10L, 9L, 10L, 10L, 
3L, 5L, 6L, 3L, 5L), .Label = c("Apr", "Aug", "Dec", "Feb", "Jan", 
"Jul", "Jun", "Mar", "May", "Nov", "Sep"), class = "factor"), 
    Year = structure(c(1L, 2L, 3L, 1L, 3L, 2L, 1L, 1L, 3L, 2L, 
    2L, 2L, 3L, 1L, 3L, 3L, 1L, 3L, 3L, 3L, 3L, 3L), .Label = c("2010", 
    "2011", "2012"), class = "factor"), Value = structure(c(1L, 
    2L, 7L, 3L, 4L, 11L, 8L, 8L, 2L, 10L, 4L, 6L, 9L, 10L, 5L, 
    10L, 10L, 11L, 1L, 7L, 11L, 1L), .Label = c(" 1", " 2", " 3", 
    " 4", " 5", " 6", " 7", " 8", " 9", "11", "12"), class = "factor")), class = "data.frame", row.names = c(NA, 
-22L))

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 04 июня 2019

Определение меток оси X с помощью параметра labels решает вашу проблему.

Вы можете использовать следующий код:

require(lattice)

lattice::dotplot(Patient ~ Value | Year, 
                 data = data_conrad, xlab = "Time", ylab = "Patient" , 
                 scales= list(x = list(at = seq(from = 1, to = 12, by =1),
                                       labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                                                  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))))

Получив следующий график:

enter image description here

Когда мы внимательно рассмотрим график, становится очевидным, что Декабрь отсутствует, и хотя этот месяц может отсутствовать в данных, вы все равно хотите, чтобы он появился на графике. Корень проблемы будет в данных, поэтому давайте посмотрим:

str(data_conrad)
List of 5
 $ Patient: Factor w/ 10 levels " 1"," 2"," 3",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Month  : Factor w/ 11 levels "Apr","Aug","Dec",..: 5 4 6 8 1 3 2 2 4 10 ...
 $ Year   : Factor w/ 3 levels "2010","2011",..: 1 2 3 1 3 2 1 1 3 2 ...
 $ Value  : Factor w/ 11 levels " 1"," 2"," 3",..: 1 2 7 3 4 11 8 8 2 10 ...

Мы видим, что все переменные factors, где Месяц и Год должны быть ordered factors. Месяц должен включать все двенадцать месяцев. Значение должно быть integer. Давайте исправим это:

data_conrad2 <- data_conrad
data_conrad2$Month <- factor(data_conrad$Month, 
                             levels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                                        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
                             ordered = TRUE)
data_conrad2$Month <- factor(data_conrad$Year,
                             levels = ("2010", "2011", "2012"),
                             ordered =  TRUE)
data_conrad2$Value <- as.integer(as.character(data_conrad$Value))

Теперь мы снова выполняем код с новым фреймом данных data_conrad2 :

lattice::dotplot(Patient ~ Value | Year, 
                 data = data_conrad2, xlab = "Time", ylab = "Patient" , 
                 scales = list(x = list(at = 1:12,
                                       labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                                                  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))))

enter image description here

Добавление параметра вращения rot может улучшить читаемость графика:

lattice::dotplot(Patient ~ Value | Year, 
                 data = data_conrad2, xlab = "Time", ylab = "Patient" , 
                 scales= list(x = list(at = 1:12,
                                       labels = c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
                                                  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"),
                                       rot = 45))

)

получая этот график:

enter image description here

Будьте осторожны, однако

аргументы и их положение в формуле для точечного графика определяют, что изображено на какой оси

с вашим вызовом в вышеприведенных примерах, пациент находится на оси у, а значение на оси х (годы в разных гранях). Независимо от того, как вы переименуете метки, и как бы ни были изобретательны вы называете галочки на оси x, это то, что вы получите.

Чтобы сделать это немного понятнее, следующий код:

dotplot(Patient  ~ Value  |  Year, 
        data = data_conrad2, xlab = "Value", ylab = "Patient" , 
        scales= list(x = list(at = 1:12))
)

дает этот участок

enter image description here

И, возможно, мы привыкли видеть значение на оси Y:

dotplot(Value  ~ Patient  |  Year, 
        data = data_conrad2, xlab = "Patient", ylab = "Value" , 
        scales= list(x = list(at = 1:12))
)

дает этот участок

enter image description here

Надеюсь, это немного прояснило для вас.

...