ggplot2 отображает два подмножества

У меня есть набор данных CSV, который выглядит так:

GPU_Config,Job_Num,Stack_Num,Seconds
02_13,2,16double,1106
02_13,4,16double,906.25
02_13,6,16double,914.75
02_13,8,16double,982.5
02_13,10,16double,1013.25
02_13,12,16double,1067.5
02_13,16,16double,1026.25
0_1geom_smooth()3,4,16double,959.75
0_1geom_smooth()3,8,16double,847.5
0_1geom_smooth()3,12,16double,976.5
0_1geom_smooth()3,16,16double,972.75

Я хочу отобразить два geom_smooth(), каждый из которых использует отдельный тип GPU_Config, 02_13 и 0_1_2_3. Я могу использовать метод подмножества R в параметрах ggplot() следующим образом:

ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3")), aes(y = Seconds, x = Job_Num, color = GPU_Config)) + geom_smooth() + geom_point()

Однако в результате получается такой график:

Тестовый график

Я хочу разделить два сглаживателя, чтобы иметь возможность манипулировать каждым отдельно для каждого подмножества данных (gpu type). Однако что-то вроде этого ниже не работает:

ggplot(test, aes(y = Seconds, x = Job_Num)) + geom_smooth(subset(test, GPU_Config %in% c("02_13"))) + geom_smooth(subset(test, GPU_Config %in% c("0_1_2_3"))) + geom_point()

и приводит к этой ошибке:

Error: Mapping must be created by `aes()` or `aes_()`

Может ли кто-нибудь помочь с этим? Примечание. Я ни в коем случае не являюсь экспертом по R.


person antong    schedule 02.08.2016    source источник
comment
Если вы построите ggplot(test[8:11, ], aes(y = Seconds, x = Job_Num)) + geom_smooth(), вы увидите, что ggplot фактически не может получить geom_smooth() для второй части ваших данных.   -  person tluh    schedule 02.08.2016
comment
Являются ли эти данные просто несовместимыми с методом сглаживания по умолчанию?   -  person antong    schedule 02.08.2016
comment
Вам часто нужно специально записывать аргумент data в geoms, так как data не является первым аргументом, как в ggplot. Попробуйте geom_smooth(data = subset(...etc...)). Ошибка в том, что первый аргумент в geom_smooth равен mapping, но вы указываете набор данных.   -  person aosmith    schedule 02.08.2016


Ответы (1)


Это работает, если вы также расслаиваете цвет fill:

ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3"))) +
    aes(y = Seconds, x = Job_Num, color = GPU_Config, fill = GPU_Config) +
    geom_smooth() +
    geom_point()

Однако во всех случаях ваша конфигурация 02_13 сталкивается с проблемами при локальной подгонке — ваш код выдает соответствующие предупреждения даже в исходной версии. Чтобы исправить это, требуется другой метод сглаживания, например:

ggplot(subset(test, GPU_Config %in% c("02_13", "0_1_2_3"))) +
    aes(y = Seconds, x = Job_Num, color = GPU_Config, fill = GPU_Config) +
    geom_smooth(method = lm) +
    geom_point()

Это разделит доверительные интервалы на GPU_Config.

person Konrad Rudolph    schedule 02.08.2016
comment
Когда я рисую то, что вы написали, я получаю тот же график, что и я, только с другим цветом заливки. (Все светло-голубые, а не все серые). Не могли бы вы сказать мне, что именно не так с моим кодом (предупреждения и все такое/почему другой метод сглаживания)? - person antong; 02.08.2016
comment
Кроме того, в любом случае, есть ли у меня еще способ написать этот код, чтобы я мог индивидуально редактировать сглаживание для каждого типа графического процессора? (Опять же, ни в коем случае не эксперт по R) - person antong; 02.08.2016
comment
@antong Как я уже сказал, вы не можете использовать сглаживание LOESS с вашими данными — об этом говорят вам предупреждения, и поэтому сглаженный доверительный интервал отсутствует для вашей конфигурации 02_13. Другой метод сглаживания (например, method = lm) устраняет эту ошибку, но, очевидно, приводит к принципиально другому графику. - person Konrad Rudolph; 02.08.2016
comment
@antong Вы не должны использовать разные методы сглаживания для подмножеств данных на одном графике, это вводит в заблуждение (и, следовательно, ggplot2 не может сделать это легко). - person Konrad Rudolph; 02.08.2016
comment
Нет, конечно, я бы не использовал 2 разных метода сглаживания, я просто хотел разделить две конфигурации графического процессора в том смысле, что их заливки могут иметь разные цвета, чтобы можно было различать их, но при этом использовать один и тот же метод сглаживания для каждой конфигурации. . Итак, вы говорите, что если я попытаюсь использовать другой метод сглаживания (для всех данных), две конфигурации будут разделены в своих заполнениях/ошибки исчезнут? - person antong; 02.08.2016
comment
@antong Да, это то, что пытается сказать мой ответ. Я надеюсь, что мое редактирование делает это более ясным. - person Konrad Rudolph; 02.08.2016
comment
Хорошо понял. Спасибо. Я проверю это в ближайшее время, и, надеюсь, все будет решено :) - person antong; 02.08.2016