2016-09-05 4 views
2

я сделал сюжет переменного lsiete и lcinco со следующим кодом:Всего возможное qplots с разными категориальными переменными

qplot(lsiete, lcinco, data=enc, color=LENGTHE) 

enter image description here

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

> names(enc[,ind]) 
[1] "SEX"  "RACE"  "MSTATUS" "EDUC"  "POSITION" "SATSCHED" "TYPESCH" "FLEX"  "URBRUR" "HOURS" 
[11] "SCHOOL" "ANJOB" "TYPERES" "LENGTHE" "HOWLONG" "REASONQ" "REASONW" "WHY" 

Итак, я хочу панель со всеми возможными участками рассеяния с упомянутыми с ondition.

Как написать код для этого?

EDIT: Чтобы быть более ясным, изменение lsiete и lcinco не делает, то вместо того, чтобы переменные в изменении цвета

EDIT 2: Чтобы дать воспроизводимый пример. Я создаю следующий кадр данных со случайными данными:

sn <- data.frame(a=rnorm(100),b=rnorm(100), cat1=sample(c('male', 'female'), 100, replace=TRUE),cat2=sample(c('U', 'AL'), 100, replace=TRUE),cat3=sample(c('AR', 'ML'), 100, replace=TRUE),cat4=sample(c('LM', 'KR'), 100, replace=TRUE)) 

я могу создать qplot с а и Ь, и дать цвет согласно CAT2:

qplot(a,b,data=sn,color=cat2) 

Но я хочу, чтобы держать и б всегда, и давать цвет в соответствии с остальными категориальными переменными, чтобы иметь панель всех возможных диаграмм рассеяния.


+0

Нам нужно подготовьте данные для ggplot, переведя его в широкую и длинную. См. [Этот пост для получения дополнительной информации] (http://stackoverflow.com/questions/1181060), затем сюжет. Кроме того, было бы неплохо дать нам [данные примера игрушки] (http://stackoverflow.com/questions/5963269) для тестирования. – zx8754

ответ

3

Самый простой способ - переформатировать ваши данные и использовать фасетку. Это создаст единый сюжет с четырьмя панелями и общей легендой.

sn2 <- tidyr::gather(sn, 'cat', 'col', cat1:cat1.1) 

ggplot(sn2, aes(a, b, col = col)) + geom_point() + facet_wrap(~cat) 

enter image description here

В качестве альтернативы, если вы предпочли бы отдельные легенды вам необходимо создать четыре участка и сшить их вместе, вот так:

plot_fun <- function(cat) { 
    ggplot(sn, aes_(~a, ~b, col = cat)) + geom_point() 
} 

plot_list <- lapply(c(~cat1, ~cat2, ~cat3, ~cat1.1), plot_fun) 
cowplot::plot_grid(plotlist = plot_list, align = 'hv') 

enter image description here

+0

Ваш второй код хорош, но у меня проблемы с категориальными переменными, потому что в реальных данных есть много категориальных переменных, и я не знаю, как установить строку, которую я создал как параметр. Например, я создал: это категории: [1] "~ SEX" "~ RACE" "~ MSTATUS" "~ EDUC" "~ POSITION" "~ SATSCHED" "~ TYPESCH" "~ FLEX" "~ URBRUR" [10] «ЧАСЫ» «ШКОЛА» «ANJOB» «TYPERES» «~ LENGTHE» "~ HOWLONG" "~ REASONQ" "~ REASONW" "~ WHY", но эти символы не распознаются как категориальные переменные в ggplot. Как я могу это исправить? – CreamStat

+0

Я не могу сказать, так как мой код работает с вашими данными примера. Являются ли эти переменные факторами или символьными векторами в вас data.frame? Или они числовые? Какой результат вы получаете? – Axeman

+0

Они являются фактор-переменными, проблема в применении (c (~ cat1, ~ cat2, ~ cat3, ~ cat1.1), plot_fun), я не могу написать вручную более 100 сотен факторов-факторов, подобных этому. – CreamStat