Я хотел бы создать несколько штриховых диаграмм, где я бы представлял 4 разные категории, которые сами по себе распространяются на 4 другие категории.
У меня есть этот пример df:
structure(list(type = c("NE18", "NE18", "NE18", "NE18", "NE18",
"NE18", "NE18", "NE18", "NE18", "NE18", "NE18", "NE18", "NE18",
"NE18", "NE18", "NE18", "NE18", "NE18", "NE18", "NE18", "NE18",
"NE18", "NE18", "NE18", "NE18", "NE21", "NE21", "NE21", "NE21",
"NE21", "NE21", "NE21", "NE21", "NE21", "NE21", "NE21", "NE21",
"NE21", "NE21", "NE21", "NE21", "NE21", "NE21", "NE21", "NE21",
"NE21", "NE21", "NE21", "NE21", "NE21", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA",
"NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "NA", "SA",
"SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA",
"SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA", "SA",
"SA", "SA"), score = c("R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"0.9 > R score >= 0.8", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"0.5 > R score >= 0.2", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"0.5 > R score >= 0.2", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "0.9 > R score >= 0.8", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "0.5 > R score >= 0.2", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "0.5 > R score >= 0.2", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "0.8 > R score >= 0.7", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "0.9 > R score >= 0.8", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "0.8 > R score >= 0.7", "R score = 0.96",
"0.8 > R score >= 0.7", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"0.8 > R score >= 0.7", "R score = 0.96", "R score = 0.96", "R score = 0.96",
"R score = 0.96", "0.8 > R score >= 0.7", "R score = 0.96", "R score = 0.96",
"R score = 0.96")), row.names = c("1", "2", "3", "4", "5", "6",
"7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17",
"18", "19", "20", "21", "22", "23", "24", "25", "11000", "2620",
"3100", "4100", "5100", "6100", "787", "8100", "9100", "10100",
"11100", "12100", "13100", "14100", "15100", "16100", "17100",
"18100", "19100", "20100", "21100", "22100", "23100", "24100",
"25100", "46", "2002", "2057", "2223", "2391", "2459", "2509",
"2533", "2029", "2062", "2089", "2102", "2131", "2139", "2159",
"2179", "2192", "2201", "2252", "2265", "2282", "2302", "2335",
"2346", "2362", "1410", "1411", "1412", "1413", "1414", "1415",
"1416", "1417", "1418", "1419", "1420", "1421", "1422", "1423",
"1424", "1425", "1426", "1427", "1428", "1448", "1449", "1450",
"1451", "1452", "1453"), class = "data.frame")
У меня 2 столбцы. Мне нужно 4 отдельных штриховых графика, по 1 для каждого уникального score
из столбца score
(они не должны быть все представлены на одном рисунке). Каждый из этих 4 столбцов должен состоять из 4 столбцов, по одному для каждого отдельного уникального значения, которое у меня есть в столбце type
. Предполагается, что столбчатый график представляет долю данных в столбце type
, что означает, что через мои 4 столбца итого type == NE18
должно быть 100% et c.
Для лучшего понимания я суммировал эту информацию в такой таблице:
score
type 0.5 > R score >= 0.2 0.8 > R score >= 0.7 0.9 > R score >= 0.8 R score = 0.96
NA 0 4 4 92
NE18 8 0 4 88
NE21 8 0 4 88
SA 0 16 0 84
Дело в том, что у меня есть не знаю, как это сделать с ggplot2
с помощью geom_bar()
, так как мне нужно представить это в нескольких независимых штриховых диаграммах. Я думаю, мне нужно предоставить ggplot мои данные df
, а не сводную таблицу. Я попытался преобразовать таблицу в df и использовать ее для использования ggplot, но все же я не могу сгруппировать свои данные
Мне не удалось найти что-то подобное ни в другом сообщении, ни в ggplot документация.
Например, если я сделаю это:
list_score <- unique(df$score)
for (my_score in list_score){
my_plot <- ggplot(df[which(df$score == my_score),], aes(x=type)) +
geom_bar(aes(y = (..count..)/sum(..count..))) +
ggtitle(my_score) +
geom_text(stat='count', aes(group=type, label=..count../sum(..count..)), position = position_stack(vjust = 0.5))
print(my_plot)
}
Я получаю процентное соотношение, рассчитанное на цифре, что означает, что сумма NE18
+ NE21
+ NA
+ SA
= 1, что не то, что я хочу
Надеюсь, я ясен
Изменить:
Вот моя сводная таблица
structure(list(type = structure(c(1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L), .Label = c("NA", "NE18",
"NE21", "SA"), class = "factor"), score = structure(c(1L, 1L,
1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L), .Label = c("0.5 > R score >= 0.2",
"0.8 > R score >= 0.7", "0.9 > R score >= 0.8", "R score = 0.96"
), class = "factor"), Freq = c(0, 8, 8, 0, 4, 0, 0, 16, 4, 4,
4, 0, 92, 88, 88, 84)), class = "data.frame", row.names = c(NA,
-16L))
Я близок к тому, что хочу здесь. Но я не могу иметь дело с метками:
ggplot(df, aes(x = score)) +
geom_bar(aes(y = ..prop.., group = type, fill = type), position = position_dodge()) +
geom_text(stat = "count", aes(group = type, label = ..prop..), size = 3, position = position_dodge(width = 1))
Мне нужно сочетание этих двух графиков, где метки не мешают моей оси Y:
введите описание изображения здесь