Настройка размера ячейки гистограммы в Rstudio

#r

#r

Вопрос:

Я хочу создать простую столбчатую диаграмму из списка случайных чисел (1-10) со следующим кодом

 Random.Integer.Data = table(Problem.2.Data$Random.Integer)
barplot(Random.Integer.Data, col = "Orange", main = "Random Integer", xlab = "Number Choice", ylab = "Frequency")
  

Когда я использую этот код, он создает гистограмму с номером 1 6 9 по оси x. Для меня также создается только 8 столбцов, что означает, что он странно связывает случайные целые числа. Я хотел бы, чтобы это была одна строка для каждого числа от 1 до 10, и я хотел бы, чтобы ось x также показывала это.

Может ли кто-нибудь помочь мне с кодом, который мне нужен для того, чтобы сделать это?

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

1. Пожалуйста, сделайте свой вопрос воспроизводимым: добавьте Problem.2.Data$Random.Integer к вопросу. Используйте dput(Problem.2.Data$Random.Integer) или dput(head(Проблема. 2. Данные$Случайные. Целое число, n)) где n — некоторое целое число, достаточно большое, чтобы сделать вопрос осмысленным.

Ответ №1:

Я не думаю, что в вашем коде что-то не так. Что-то не так с вашими предположениями о ваших данных.

Давайте попробуем воссоздать фрейм данных с тем же именем и заголовком столбца, и мы наполним его 100 случайными целыми числами от 1 до 10:

 set.seed(69)

Problem.2.Data <- data.frame(Random.Integer = sample(10, 100, TRUE))
head(Problem.2.Data)
#>   Random.Integer
#> 1              1
#> 2              2
#> 3              8
#> 4              7
#> 5              7
#> 6              6
  

Теперь мы будем использовать ваш точный код и убедимся, что он работает так, как ожидалось:

 Random.Integer.Data = table(Problem.2.Data$Random.Integer)
barplot(Random.Integer.Data, 
        col = "Orange", 
        main = "Random Integer", 
        xlab = "Number Choice", 
        ylab = "Frequency")
  

Однако давайте попробуем это снова с меньшим размером выборки, всего 20 строк:

 Problem.2.Data <- data.frame(Random.Integer = sample(10, 20, TRUE))
head(Problem.2.Data)
#>   Random.Integer
#> 1              8
#> 2              5
#> 3              6
#> 4              8
#> 5              4
#> 6              6

Random.Integer.Data = table(Problem.2.Data$Random.Integer)
barplot(Random.Integer.Data, 
        col = "Orange", 
        main = "Random Integer", 
        xlab = "Number Choice", 
        ylab = "Frequency")
  

Теперь мы видим, что всего 7 ячеек. Почему? Потому что, если мы посмотрим на нашу таблицу, в наших данных всего 7 уникальных целых чисел:

 Random.Integer.Data
#> 
#>  3  4  5  6  8  9 10 
#>  1  1  5  5  5  1  2
  

Мы можем исправить это, сделав наш столбец коэффициентом с 10 уровнями:

 Random.Integer.Data = table(factor(Problem.2.Data$Random.Integer, 1:10))
barplot(Random.Integer.Data, 
        col = "Orange", 
        main = "Random Integer", 
        xlab = "Number Choice", 
        ylab = "Frequency")
  

Также обратите внимание, что если я уменьшу окно, некоторые метки оси x исчезнут, чтобы предотвратить перекрытия:

введите описание изображения здесь
Создано 2020-08-16 пакетом reprex (версия 0.3.0)

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

1. Спасибо за вашу помощь! Это дало мне 10 столбиков, как я и хотел, однако по-прежнему только обозначение оси x как 1 5 9. Есть ли настройка, позволяющая отображать на графиках каждый отдельный выбор номера?

2. @Jordan вы пробовали просто перетащить окно графика, чтобы сделать его больше? Все метки должны отображаться по умолчанию, но если площадь графика слишком мала по сравнению с размером текста, некоторые цифры будут подавлены, чтобы предотвратить перекрытия.

3. Да, это исправлено. Извините, что я совсем новичок в программном обеспечении, поэтому все еще знакомлюсь с мелочами!

Ответ №2:

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

 #install.packages("ggplot2")
library(ggplot2)
df<-data.frame(x=seq(1:10),
               y=sample(10,10,TRUE)) #your data
ggplot(df,aes(x=factor(x),y=y)) 
  geom_col(fill="Orange") 
  labs(title =  "Random Integer", x = "Number Choice", y = "Frequency")