R Plot Гистограмма транспонированного кадра данных - PullRequest
0 голосов
/ 27 апреля 2018

Я пытаюсь построить следующий фрейм данных в виде гистограммы, где значения для столбца отфильтрованного провайдера перечислены в отдельном столбце (n)

Обычно ggplot и все остальные графики работают на горизонтальном фрейме данных, и после нескольких поисков я не могу найти способ построения этого "транспонированного" варианта фрейма данных.

Кластер должен сгруппировать каждую гистограмму, и внутри каждого кластера я бы построил каждый filteredprovince на основе значения n столбца

Спасибо вам за поддержку

d <- read.table(text=
"  cluster PROVINCIA     n filteredprovince
 1       1 08          765 08              
 2       1 28          665 28              
 3       1 41          440 41              
 4       1 11          437 11              
 5       1 46          276 46              
 6       1 18          229 18              
 7       1 35          181 other           
 8       1 29          170 other           
 9       1 33          165 other           
10       1 38          153 other ", header=TRUE,stringsAsFactors = FALSE)

UPDATE

Благодаря предложению в комментариях я почти достиг желаемого формата:

ggplot(tab_s, aes(x = cluster, y = n, fill = factor(filteredprovince))) + geom_col()

enter image description here

Есть какой-нибудь способ нанести метки Y не на частоты, а на%?

Ответы [ 2 ]

0 голосов
/ 27 апреля 2018

Если я правильно понимаю, вы пытаетесь использовать geom geom_bar(), который доставляет вам проблемы, потому что он хочет создать своего рода гистограмму, но вы уже сделали такого рода сводку.

(Если бы вы предоставили код, который вы пробовали до сих пор, мне не пришлось бы догадываться)

В этом случае вы можете использовать geom_col() вместо.

ggplot(d, aes(x = filteredprovince, y = n, fill = factor(PROVINCIA))) + geom_col()

enter image description here

Кроме того, вы можете изменить стат по умолчанию geom_bar() с "count" на "identity"

ggplot(d, aes(x = filteredprovince, y = n, fill = factor(PROVINCIA))) +
   geom_bar(stat = "identity")

См. этот вопрос о том, что такое статистика


РЕДАКТИРОВАТЬ: Обновление в ответ на обновление OP:

Чтобы отобразить проценты, вам придется изменить сами данные.

Просто поделите n на сумму всех n и умножьте на 100.

d$percentage <- d$n / sum(d$n) * 100
ggplot(d, aes(x = cluster, y = percentage, fill = factor(filteredprovince))) + geom_col()
0 голосов
/ 27 апреля 2018

Я не уверен, что прекрасно понимаю, но если проблема в ориентации вашего информационного кадра, вы можете транспонировать его с помощью t(data), где data - ваш информационный кадр.

...