Сложенные линии с несколькими факторами, используя решетку и R
Большая часть R переводит ваши данные в правильный формат, и я изо всех сил стараюсь создать двухпанельный график с двумя группами по три в каждой. В конечном счете, я хотел бы показать серию упрощенных коробок, которые просто показывают линию от Lower95 до Upper95 и точку для центра, для каждого препарата и теста и имеют две панели (Sen & Spec), которые имеют шесть линий (и указывает на них).
Мои упрощенные данные выглядят так
df2 <- data.frame (
Center = c(0.94, 0.97, 0.95, 0.97, 1, 0.94, 1, 0.99, 0.96, 0.98, 0.98, 0.99),
Lower95 =c(0.91, 0.95, 0.93, 0.95, 0.98, 0.91, 0.98, 0.96, 0.92, 0.96, 0.95, 0.96),
Upper95 =c(0.96, 0.98, 0.97, 0.98, 1, 0.96, 1, 1, 0.98, 0.99, 0.99, 1 ),
Y = c(1,2,3,4,5,6,1,2,3,4,5,6),
Drug=c("INH","INH","INH","RIF","RIF","RIF","INH","INH","INH","RIF","RIF","RIF"),
Test=c("LPA","MODS","PSQ","LPA","MODS","PSQ","LPA","MODS","PSQ","LPA","MODS","PSQ"),
Measure=c("Sen","Sen","Sen","Sen","Sen","Sen","Spec","Spec","Spec","Spec","Spec","Spec")
)
attach(df2)
xyplot(Y~Lower95+Upper95|Measure, df=df2, type="o")
Таким образом, это выводит это изображение, и есть несколько проблем - :
- Я использую Y как фиктивную переменную, чтобы попытаться получить две группы из трех тестов на одной панели, но это, похоже, не сработало как задумано. Две группы по три теста находятся в каждой панели (но см. № 2)
- Сюжет соединяет три точки из трех тестов (не две точки Lower95 и Upper95)
- Мне не ясно, как получить Центр в качестве точки на графике (ах)
Вот что-то вроде того, что я желаю (мой взлом в GIMP) -
Я безуспешно пытался изменить данные и некоторые другие вещи в xyplot (например, различные факторы / группы), но я не могу заставить его работать так, как мне хотелось бы.
Спасибо за вашу помощь!
1 ответ
То, что вы рисуете, больше всего похоже на lattice
dotplot. стандарт lattice
не подходит для ошибок, но Hmisc
Библиотека добавляет эту функциональность в lattice
функционирует хорошо. Так что вы могли бы сделать
library(lattice)
library(Hmisc)
Dotplot(Test~Cbind(Center,Lower95,Upper95)|Measure+Drug, df2)
получить
если вы хотите пойти дальше, вы также можете включить latticeExtra
переместить этикетки с лекарствами влево
library(latticeExtra)
useOuterStrips(Dotplot(Test~Cbind(Center,Lower95,Upper95)|Measure+Drug, df2))
что приводит к