Визуализация с использованием boxplot для больших наборов данных - PullRequest
3 голосов
/ 31 марта 2020

У меня есть фрейм данных в следующем формате.

item    price
item1    23
item2    45
item1    24
item3    98
item2    45.9
item3    97.2

Исходя из этого, мне нужно отобразить графики распределения цен для каждого уникального элемента в столбце элемента. Есть около 80 уникальных предметов. Итак, я не уверен, как их сгруппировать так, чтобы я получал коробочные диаграммы по крайней мере с 4 уникальными предметами с диапазоном на каждом графике и несколькими такими графами для всех 80 уникальных предметов. Я не уверен, должен ли я изменить свою структуру данных, и даже если мне нужно, на каком основании это будет? Я пытался с facet_wrap, но nrow не имеет никакого значения. Любая помощь с этим будет высоко ценится.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Вам нужно будет создать переменную группировки, основанную на именах ваших предметов. Поскольку все ваши элементы в примере называются item#, я просто вытащил из них номер, чтобы сделать группировку var:

df <- df %>%
  mutate(group = gsub("item", "", item))

p <- ggplot(df, aes(x=item, y=price)) + 
  geom_boxplot() +
  facet_wrap(item~group,scales="free")
p
0 голосов
/ 31 марта 2020

Если вы хотите иметь 4 графы на каждом графике, как вы написали, вы можете попробовать:

#library
library(tidyverse)
library(ggplot2)

#simulate your data
set.seed(2323)
data <- tibble(item=rep(paste("item",1:80),sample(1:10,80, replace=T)),
               price=sample(1:10,407,replace=T))


#group you data
n=4 #groups

data %>% 
  mutate(item=factor(item,levels=unique(item))) %>% 
  group_by(item) %>% 
  mutate(nr=group_indices()) %>% 
  mutate(supergroup=as.numeric(cut(nr,seq(0,length(unique(.$nr)),n)))) %>% 
  select(item,price,supergroup) -> grouped_data

#draw plot         
ggplot(grouped_data,aes(x=item,y=price)) +
  geom_boxplot() + 
  facet_wrap(~supergroup,scales="free") +
  theme(axis.text.x = element_text(angle=90, hjust=1))

enter image description here

...