#r #ggplot2 #bar-chart
#r #ggplot2 #гистограмма
Вопрос:
У меня есть огромный набор данных, которые я хочу отобразить либо на R, либо на python в виде сложенной или сгруппированной гистограммы. Давайте предположим, что это мои данные
df<- data.frame(Continent= c("Asia","Africa","EU","US","Antractica"),
Death= c(24242,75457,63521,967445,947),
Cases= c(92332,338753,700346,8536856,4232) )
Во всех примерах, которые я видел об этих столбцах, всегда есть две категории и одно значение (например, хорошо известный алмаз или автомобиль, встроенный в набор данных в R), но для меня это не так. У меня есть strings
значение (континент), а затем куча столбцов в виде dbl
приведенный ниже код дает мне вид результата, но я не удовлетворен
p<- ggplot(df) aes (x=Continent, y= Cases, fill= "Cases" ) geom_bar(stat="identity")
geom_bar(stat="identity",aes(y=Death, fill= "Death")) ylab("All Covid Cases")
p
это нормально, но легенда не совсем правильная (видна заливка вместо легенды), а также я не смог преобразовать ее в сгруппированную, указав postion="dodge"
значение!
Я также пробовал Seaborn, но ни один из них не дает мне следующих изображений.
и я хочу получить такие графики
или
Любые идеи будут оценены
Комментарии:
1. Привет! Был ли дан ответ на ваш вопрос? Если да, пожалуйста, примите ответ, чтобы будущие пользователи могли легко ссылаться на него.
Ответ №1:
В R общая идея состоит в том, чтобы получать данные в длинном формате, чтобы их было легко построить.
library(ggplot2)
library(tidyr)
df %>%
pivot_longer(cols= c(Death, Cases)) %>%
ggplot() aes(x=Continent, y= value, fill= name)
geom_col()
df %>%
pivot_longer(cols= c(Death, Cases)) %>%
ggplot() aes(x=Continent, y= value, fill= name)
geom_bar(stat = 'identity', position = 'dodge')
Ответ №2:
Вам необходимо преобразовать ваш фрейм данных из широкого в длинный. Проблема, с которой вы столкнулись, заключалась в том, что сложенные или сгруппированные диаграммы не могут быть окрашены числами, им нужна категория, чтобы их различать.
Когда мы melt
data.table
создаем фрейм данных с помощью пакета, он выглядит следующим образом:
Continent Death Cases
1: Asia 24242 92332
2: Africa 75457 338753
3: EU 63521 700346
4: US 967445 8536856
5: Antractica 947 4232
Чтобы выглядеть так:
Continent variable value
1: Asia Death 24242
2: Africa Death 75457
3: EU Death 63521
4: US Death 967445
5: Antractica Death 947
6: Asia Cases 92332
7: Africa Cases 338753
8: EU Cases 700346
9: US Cases 8536856
10: Antractica Cases 4232
После этого мы можем легко построить график.
Вот полный код:
library(data.table)
#Define Dataset
df<- data.frame(Continent= c("Asia","Africa","EU","US","Antractica"),
Death= c(24242,75457,63521,967445,947),
Cases= c(92332,338753,700346,8536856,4232) )
# We will combine the counts into one column, and distinguish them by
# Type in another column
df <- melt(setDT(df), id.vars = c("Continent"),measure.vars = c("Death", "Cases"))
#Lets Plot
ggplot(df, aes(factor(Continent), value, fill = variable))
geom_bar(stat="identity", position = "dodge")
scale_fill_brewer(palette = "Set1")
labs(title = "Cases and Deaths by Continent", x = "Continent", y = "Number", fill = "Type")
Ответ №3:
На самом деле все, что вам нужно barplot
, это то, что поставляется с R. Нет необходимости прикасаться к данным.
barplot(cbind(Death, Cases) ~ Continent, df, col=c("lightblue", "orange"),
legend.text=names(df)[2:3])
barplot(cbind(Cases, Death) ~ Continent, df, col=c("orange", "lightblue"), beside=T,
legend.text=names(df)[3:2])