R — Ggplot dataframe неправильно сортирует данные

#r #dataframe #plot

#r #фрейм данных #график

Вопрос:

Я пытаюсь отобразить данные из набора данных

Я использовал эту функцию:

 wine_red <- read.csv2("winequality-red.csv")
ggplot(wine_red, aes(x=quality, y=alcohol))   
    scale_fill_continuous(type = "viridis")  
    geom_bin2d(binwidth=1)
 

Но, делая это, я получаю ось y, которая не отсортирована должным образом: она начинается с 10 -> 19, затем 7 -> 9

график

Как я могу отсортировать их в правильном числовом порядке?

Комментарии:

1. Это происходит, если ваши значения y не являются числовыми, они идеально отсортированы, как и должны делать символы. Поэтому убедитесь, что ваши значения y являются числовыми.

2. Хорошо, и как это сделать? Я попробовал цикл с w_red[,a]<-as.numeric(w_red[,a]) , но преобразование получило неправильные значения (0,4 стало 5, а 0,56 стало 57)

3. Пожалуйста, проясните свой пример. Вы предоставляете wine_red данные в качестве данных в своем ggplot, затем используете data в своей эстетике и теперь упоминаете w_red в качестве своих данных?

4. Я добавил строку, которая получает данные (и исправил вторую строку)

5. Вам необходимо установить разделитель и разделитель в read.csv, разница между read.csv и read.csv2 должна зависеть от языка / локали, где первый использует запятую в качестве разделителя и точку в качестве разделителя, в то время как другой использует точку с запятой в качестве разделителя и запятую в качестве разделителя. Ваши данные смешаны … так что в любом случае с read.csv у вас есть правильный разделитель, но неправильный разделитель. таким образом, он видит ваши значения как строку, а не как число. Короче говоря, я советую всегда использовать только read.csv и установить свои настройки: read.csv(file, sep = ";", dec = ".") будет работать.

Ответ №1:

Ваш код работает нормально, так как data вам нужно использовать winequality_red and для x=winequality_red$quality and y=winequality_red$alcohol . Также ниже приведен пример, как преобразовать ваши данные, чтобы разделить столбцы.

 winequality_red <- read_delim("HERE SPECIFY YOUR DATA LOCATION", 
  ";", escape_double = FALSE, trim_ws = TRUE)

ggplot(winequality_red , aes(x=winequality_red$quality, y=winequality_red$alcohol))   
  scale_fill_continuous(type = "viridis")  
  geom_bin2d(binwidth=1)
 

введите описание изображения здесь

Комментарии:

1. read_delim выдает ошибку в скобках

2. @Foxhunt именно так, как вам нужно что-то вроде «C:/Users/Downloads/winequality-red.csv «. Итак, вам нужно указать местоположение ваших данных, за которым следуют остальные, «;», escape_double = FALSE, trim_ws = TRUE)

3. Извините, я пропустил строку, ";" которая выдает ошибку. Я удалил его, и он работал хорошо. Спасибо

Ответ №2:

Что-то вроде этого?

 library(tidyverse)

df <- winequality_red
df %>% 
  select(quality, alcohol) %>% 
  ggplot(aes(x = quality, y=alcohol)) 
  scale_fill_continuous(type = "viridis") 
  geom_bin2d(binwidth = 1)

 

введите описание изображения здесь

Комментарии:

1. Я попробовал ваш код, но получил тот же результат, что и предыдущий

2. Используем ли мы один и тот же фрейм данных: winequality_red

3. Да, это так, с качеством, которое варьируется от 3 до 8, а alcohol — от 8,4 до 14,9. Я делал только read.csv2 раньше

4. используйте это вместо read.csv(file, sep = ";", dec = ".")