Подтвердить что ты не робот

Сложенная гистограмма

Я хотел бы создать сложную диаграмму, используя ggplot2 и geom_bar.

Вот мои исходные данные:

Rank F1     F2     F3
1    500    250    50
2    400    100    30
3    300    155    100
4    200    90     10

Я хочу сложную диаграмму, где x - ранг, а y - значения в F1, F2, F3.

# Getting Source Data
  sample.data <- read.csv('sample.data.csv')

# Plot Chart
  c <- ggplot(sample.data, aes(x = sample.data$Rank, y = sample.data$F1))
  c + geom_bar(stat = "identity")

Это насколько я могу получить. Я не уверен, как я могу складывать остальные значения полей.

Может быть, мой data.frame не в хорошем формате?

4b9b3361

Ответ 1

Ты сказал:

Может быть, мой data.frame не в хорошем формате?

Да, это правда. Ваши данные находятся в формате широкий. Вы должны поместить его в формат длинный. Вообще говоря, длинный формат лучше подходит для сравнения переменных.

Используя reshape2, например, вы делаете это с помощью melt:

dat.m <- melt(dat,id.vars = "Rank") ## just melt(dat) should work

Затем вы получите свой барплот:

ggplot(dat.m, aes(x = Rank, y = value,fill=variable)) +
    geom_bar(stat='identity')

Но используя обозначения lattice и barchart умных формул, вам не нужно изменять свои данные, просто выполните следующее:

barchart(F1+F2+F3~Rank,data=dat)

Ответ 2

Вам нужно преобразовать данные в длинный формат и не использовать $ внутри aes:

DF <- read.table(text="Rank F1     F2     F3
1    500    250    50
2    400    100    30
3    300    155    100
4    200    90     10", header=TRUE)

library(reshape2)
DF1 <- melt(DF, id.var="Rank")

library(ggplot2)
ggplot(DF1, aes(x = Rank, y = value, fill = variable)) + 
  geom_bar(stat = "identity")

enter image description here

Ответ 3

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

require(reshape2)
sample.data.M <- melt(sample.data)

Теперь ваши значения полей представлены их собственными строками и идентифицируются через столбец переменных. Теперь это можно использовать в рамках эстетики ggplot:

require(ggplot2)
c <- ggplot(sample.data.M, aes(x = Rank, y = value, fill = variable))
c + geom_bar(stat = "identity")

Вместо укладки вам также может быть интересно показать несколько графиков с использованием граней:

c <- ggplot(sample.data.M, aes(x = Rank, y = value))
c + facet_wrap(~ variable) + geom_bar(stat = "identity")