Как не получить данные, сжатые с boxplot? - PullRequest
0 голосов
/ 24 октября 2019

Это задание, которое мне нужно для boxplot (), но я каким-то образом сжал данные. Я новичок в R: (

Я думаю, проблема в том, что метки оси X слишком длинные и не расположены вертикально, поэтому я попытался и потерпел неудачу (на основе этого Вставка меток в полеграфик в R под углом 45 градусов? )

examples <- read.csv("mov.development.csv", sep="\t")
library(dplyr)

movies_rated_67_times <- examples %>%
  group_by(movie) %>%
  summarize(count=n(), avg_rating=mean(rating))%>%
  filter(count == 67)

boxplot_data <- examples %>%
  filter(movie %in% movies_rated_67_times$movie) %>%
  select(title, rating)

boxplot(rating~title,
        data=boxplot_data,
        xlab="Title",
        ylab="Rating", 
        xaxt = "n"
)
text(seq_along(boxplot_data$title), par("usr")[3] - 0.5, labels = names(boxplot_data$title), srt = 90, adj = 1, xpd = TRUE);

Я хочу иметь такой график enter image description here

Но я получил это https://imgur.com/XV5oZYi

Но с другим типом ярлыков, которые не слишком длинные, нормальный код будет работать enter image description here

Нормальный код:

examples <- read.csv("mov.development.csv", sep="\t")
library(dplyr)

movies_rated_67_times <- examples %>%
  group_by(movie) %>%
  summarize(count=n(), avg_rating=mean(rating))%>%
  filter(count == 67)

boxplot_data <- examples %>%
  filter(movie %in% movies_rated_67_times$movie) %>%
  select(movie, rating)

boxplot(rating~movie,
        data=boxplot_data,
        xlab="Title",
        ylab="Rating"
)

CSV-файл: https://drive.google.com/file/d/1ODM7qdOVI2Sua7HMHGEfNdYz_R1jhGAD/view?usp=sharing

Ответы [ 2 ]

0 голосов
/ 24 октября 2019

спасибо за предоставление файлов и изображений. Ваша проблема уникальна для R. Что происходит, когда вы читаете в mov.development.csv, столбцы кодируются как факторы (это происходит только в R). Таким образом, даже если вы отфильтруете свои данные к оценкам 67 раз и т. Д., Коэффициент все равно останется.

Для иллюстрации:

library(dplyr)

# read in as character
examples <- read.csv("mov.development.csv", sep="\t",stringsAsFactors=F)
class(examples$title)
# you can check the levels here

levels(examples$title)

movies_rated_67_times <- examples %>%
  group_by(movie) %>%
  summarize(count=n(), avg_rating=mean(rating))%>%
  filter(count == 67)

boxplot_data <- examples %>%
  filter(movie %in% movies_rated_67_times$movie) %>%
  select(title, rating)
#check levels
levels(boxplot_data$title)
boxplot(rating~title,
    data=boxplot_data,
    xlab="Title",
    ylab="Rating", 
    xaxt = "n")

plot1 АльтернативаВы можете читать как обычно, просто сбросьте уровни, прежде чем строить

library(dplyr)
examples <- read.csv("mov.development.csv", sep="\t")

movies_rated_67_times <- examples %>%
  group_by(movie) %>%
  summarize(count=n(), avg_rating=mean(rating))%>%
  filter(count == 67)

# drop levels here
boxplot_data <- examples %>%
  filter(movie %in% movies_rated_67_times$movie) %>%
  select(title, rating)
# more levels than actual unique title
levels(boxplot_data$title)
boxplot_data = droplevels(boxplot_data )
boxplot(rating~title,
    data=boxplot_data,
    xlab="Title",
    ylab="Rating", 
    xaxt = "n")
0 голосов
/ 24 октября 2019

Преобразование столбца заголовка из фактора в символ, кажется, исправит это. Кроме того, я вставляю разрывы строк в названия некоторых фильмов и уменьшаю размер текста, чтобы он вписывался в сюжет

boxplot_data <- examples %>%
  filter(movie %in% movies_rated_67_times$movie) %>%
  mutate(title = as.character(title)) %>% 
  select(title, rating)

boxplot_data[boxplot_data$title == "Adventures of Robin Hood, The (1938)",]$title <- "Adventures of Robin Hood,\nThe (1938)"
boxplot_data[boxplot_data$title == "Wallace & Gromit: The Best of Aardman Animation (1996)",]$title <- " Wallace & Gromit: The Best of\nAardman Animation (1996)"
boxplot_data[boxplot_data$title == "Bridges of Madison County, The (1995)",]$title <- "Bridges of Madison County,\nThe (1995)"


par(cex.axis = 0.7)
boxplot(rating~title,
        data=boxplot_data,
        xlab="Title",
        ylab="Rating")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...