Как раскрасить категориальную переменную в мозаике
Я пытаюсь показать связь между моими категориальными переменными. Я наконец получил свои данные в то, что я считаю таблицей непредвиденных расходов
subs_count
## [,1] [,2] [,3] [,4]
## carbohydrate 2 0 11 2
## cellulose 18 0 60 0
## chitin 0 4 0 4
## hemicellulose 21 3 10 0
## monosaccharide 3 0 0 0
## pectin 8 0 2 2
## starch 1 0 4 0
Где каждый столбец представляет организм. Так что для моего сюжета я положил в
barplot(subs_count, ylim = c(0, 100), col = predicted.substrate,
xlab = "organism", ylab = "ESTs per substrate")
Но мои подложки не всегда одного цвета. Что я делаю неправильно?
1 ответ
Ваши данные кажутся matrix
с именами строк, которые близки к непредвиденным обстоятельствам table
в R, но не совсем то же самое. Некоторые методы построения графиков имеют дополнительную поддержку таблиц.
Что еще более важно, я не мог запустить ваш код, потому что неясно, что predicted.substrate
является. Если бы это была палитра с 7 цветами, то она должна делать то, что вы собираетесь делать (или, по крайней мере, то, что я думаю, вы собираетесь).
Я скопировал ваши данные с:
subs_count <- structure(c(2, 18, 0, 21, 3, 8, 1, 0, 0,
4, 3, 0, 0, 0, 11, 60, 0, 10, 0, 2, 4, 2, 0, 4, 0, 0, 2, 0),
.Dim = c(7L, 4L), .Dimnames = list(c("carbohydrate", "cellulose",
"chitin", "hemicellulose", "monosaccharide", "pectin", "starch"), NULL))
А потом превратил их в table
от:
subs_count <- as.table(subs_count)
names(dimnames(subs_count)) <- c("EST", "Organism")
Тогда я использовал качественную палитру из colorspace
пакет:
subs_pal <- colorspace::qualitative_hcl(7)
И с вашим барплотом кажется разумным
barplot(subs_count, ylim = c(0,100), col = subs_pal,
xlab = "organism", ylab = "ESTs per substrate", legend = TRUE)
И отображение мозаики (как указано в заголовке) будет:
mosaicplot(t(subs_count), col = subs_pal, off = 5, las = 1, main = "")
Для визуализации закономерностей зависимости (или, скорее, отклонений от независимости) мозаичный график, заштрихованный с остатками от модели независимости, может быть еще более полезным.
mosaicplot(t(subs_count), shade = TRUE, off = 5, las = 1, main = "")
Более изысканные версии дисплеев с затененной мозаикой доступны в упаковке vcd
(см. https://dx.doi.org/10.18637/jss.v017.i03).