2013-08-26 2 views
0

Я использую сегментированный график линии и хочу сгруппировать переменные по оси y на основе коэффициента (в данном случае идентификатора пациента). Как изменить ширину тиков на y, чтобы пациент был сгруппирован по его/ее идентификатору, и для каждого уникального идентификатора дается только одна метка?группировка переменных по оси y с использованием geom_segment в ggplot2

Приведенный ниже пример моих данных и графика.

ggplot(data) + 
    geom_segment(aes(x=age1, xend=age2, 
        y=PatientID, yend=PatientID, colour=mortality)) + 
    scale_colour_manual(values=c("green", "red", "black")) 

данных:

PatientID age1  age2 mortality 
11313   0  30  low 
11313   31  50  low 
11313   51  65  med 
11313   0  10  med 
11313   0  50  hi 
131NY   0  30  med 
143CA   24  27  hi 
165099   23  45  med 
165099   46  55  hi 
165099   40  55  med 
+0

Добро пожаловать на переполнение стека. Вместо того, чтобы вставлять ваши данные, отредактируйте свой вопрос, чтобы включить данные, используя вывод 'dput()' - см. [Этот очень полезный вопрос] (http://stackoverflow.com/questions/5963269/how-to -make-a-great-r-воспроизводимый пример) для подробностей и рекомендаций. Что-то вроде 'dput (head (data, 20))' должно делать трюк. О, и лучше не называть ваши данные 'data', поскольку это имя встроенной функции в R. – SlowLearner

+0

Кажется, что работает с ggplot2_0.9.3.1 – Henrik

ответ

0

Я использовал данные выборки при условии, но выход, кажется, похож на желаемый результат, как описано в этом вопросе. Пациенты сгруппированы по ID и имеют только одну метку (см. Ниже 11313). Я что-то упускаю?

screenshot

library(ggplot2) 

mytext <- "PatientID,age1,age2,mortality 
11313,0,30,low 
11313,31,50,low 
11313,51,65,med 
131NY,0,30,med 
143CA,24,27,hi 
165099,23,45,med 
165099,46,55,hi" 

dat <- read.table(textConnection(mytext), sep = ",", 
        check.names = FALSE, 
        strip.white = TRUE, 
        header = TRUE) 

ggplot(dat) + 
    geom_segment(aes(x = age1, xend = age2, 
        y = PatientID, yend = PatientID, colour = mortality)) + 
    scale_colour_manual(values = c("green", "red", "black")) 
+0

. Моя ошибка, данные также должны иметь перекрывающиеся строки, например. PatientID = 11313; age1 = 0; age2 = 10; Смертность = низкая. Они накладываются друг на друга при использовании уникального идентификатора, и если я изменяю идентификатор, чтобы отразить линию (например, 11313 и 11313a), они отображаются на заданном расстоянии вдоль y. – user2719033

+0

Ну, именно поэтому важно обратить внимание на предоставление правильного подмножества данных с использованием 'dput' или подобных методов. Пожалуйста, отредактируйте свой вопрос, чтобы отразить данные, на которых вы хотите, чтобы мы действительно работали, и у нас будет шанс помочь вам. – SlowLearner

+0

Данные изменены с учетом «перекрывающихся» сегментов линии. – user2719033

Смежные вопросы