Вопрос по ggplot2, r, facet – Повторите значения для нескольких графиков при огранке

1

ve data.frame, который выглядит следующим образом:

> foo
        class      type    (0,10]    (10,20]    (20,30]    (30,40]
    1       A             0.6        0.2        0.1        0.1
    2       B             0.7        0.1        0.1        0.1
    3       C         1       0.5        0.4        0.1        0.0
    4       C         2       0.5        0.3        0.1        0.1
    5       D         1       0.7        0.3        0.0        0.0
    6       D         2       0.7        0.2        0.0        0.1
    7       E         1       0.4        0.3        0.2        0.1
    8       E         2       0.5        0.3        0.1        0.1

Я таю в классе введите и сделайте барплот:

ggplot(melt(foo, id=c("class", "type")), aes(x=variable, y=value, fill=class)) +
  geom_bar(position="dodge") +
  facet_grid(type ~.)

По факту,facet_grid() создает 3 графика, но я хочу, чтобыигнорировать» этот класс A & B являются типом и отображают их как в фасете для типа 1 и типа 2, и получают только 2 графика (значения A и B на самом деле должны повторяться):

Я стараюсь избегать изменения вручную и дублировать A и B с типами 1 и 2, потому что мне нужен оригинальный data.frame, как и для других графиков / тестов.

(извините случайный порядок столбцов, яя использую дома разные версии, чем на работе, и нене знаю почему это происходит)

Дома яve ggplot 0.9.3.1 и R 2.15.0 и на работе ggplot 0.9.3 и R 2.15.2. Я подозреваю версии, которые яДома не полностью совместимы. mikyatope
Случайный порядок цветов очень странный. Какая версияggplot2 ты используешь? krlmlr
Вы хотите, чтобы каждое значение NA дляtype появляться ви то и другое класс A и B (т.е. вы хотите дублировать данные NA)? Пожалуйста, уточните этот вопрос, добавив конкретный код, который вы используете для слияния данных и произвести сюжет. Drew Steen

Ваш Ответ

1   ответ
1

ggplotФилософия s: каждый элемент на графике представляет ровно одну точку данных. Так что если вы хотите иметьNA Данные в двух аспектах, вам нужно создать две точки данных для каждого исходного элемента данных.

Если вы хотите избежать явного создания временных данных только для печати, вы можете создать функцию, которая будет выполнять дублирование данных за вас. Что-то вроде следующего:

distribute.na.type <- function(dat) {
  rbind(
    transform(subset(dat, type %in% c(1, NA)), type=1),
    transform(subset(dat, type %in% c(2, NA)), type=2)
  )
}

Приведенный выше пример не проверен и не очень общий, но с небольшой удачейЯ просто буду работать. Используйте это так:distribute.na.type(melt(...))

Если дублирование данных неизбежно, это решение работало нормально, спасибо! mikyatope

Похожие вопросы