Сложенные линии с несколькими факторами, используя решетку и 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")

Таким образом, это выводит это изображение, и есть несколько проблем - оригинал:

  1. Я использую Y как фиктивную переменную, чтобы попытаться получить две группы из трех тестов на одной панели, но это, похоже, не сработало как задумано. Две группы по три теста находятся в каждой панели (но см. № 2)
  2. Сюжет соединяет три точки из трех тестов (не две точки Lower95 и Upper95)
  3. Мне не ясно, как получить Центр в качестве точки на графике (ах)

Вот что-то вроде того, что я желаю (мой взлом в 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))

что приводит к

Другие вопросы по тегам