2015-05-20 4 views
0

Я рисую диаграмму с несколькими группировками и обнаруживаю, что, хотя данные отображаются правильно, диаграмма полностью искажена на дисплее, поскольку значения галочки по оси Y не в численном порядке.r: ggplot2 гистограмма, отображающая отметки оси Y по порядку

Выходной ток график:

enter image description here

Ниже мой код, может кто-нибудь показать мне, как я могу заказать значения численно?

 library(ggplot2) 
veg_db <- read.csv("filepath\\filename.csv", header = TRUE) 
veg_df <- data.frame(veg_db) 

veg <- veg_df[c(125),c(4,5,9,12,13,18)] 
white_veg <- data.frame(t(veg)) 
colnames(white_veg) <- c("value") 
rownames(white_veg) <- c("Broccoli", "Carrots", "Leafy Greens", "Peas", "Peppers", "Tomatoes") 
white_veg <- cbind(vegetables = rownames(white_veg),ethnicity = "white", white_veg) 


veg <- veg_df[c(129),c(4,5,9,12,13,18)] 
black_veg <- data.frame(t(veg)) 
colnames(black_veg) <- c("value") 
rownames(black_veg) <- c("Broccoli", "Carrots", "Leafy Greens", "Peas", "Peppers", "Tomatoes") 
black_veg <- cbind(vegetables = rownames(black_veg),ethnicity = "black", black_veg) 

total_veg <- merge(white_veg, black_veg, all = TRUE) 
total_veg 

plot <- ggplot(total_veg, aes(vegetables, value, fill = ethnicity))+ 
    geom_bar(position="dodge",stat="identity") 


plot 

Вот результат моего total_veg dataframe:

total_veg

 vegetables ethnicity value 
1  Broccoli  white 10.18 
2  Broccoli  black 6.46 
3  Carrots  white 12.58 
4  Carrots  black 8.54 
5 Leafy Greens  white 2.88 
6 Leafy Greens  black 1.68 
7   Peas  white 19.96 
8   Peas  black 13.13 
9  Peppers  white 3.09 
10  Peppers  black 3.12 
11  Tomatoes  white 80.13 
12  Tomatoes  black 62.08 
+1

См. [Как создать воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Предпочитает 'dput()' ваших данных, чтобы мы могли видеть data.types. Кажется вероятным, что 'value' является фактором/символом, а не числовым значением в вашем data.frame. Вероятно, это из 'cbind()' создание матрицы, а не data.frame. Есть ли причина, по которой вы используете 'cbind()', а не 'data.frame()'? Или, по крайней мере, используйте 'cbind.data.frame()'. – MrFlick

+0

Тогда, возможно, это происходит во время транспонирования 't()'. Это операция, предназначенная для матриц, а не для data.frames. Без исходного входного файла нелегко воспроизвести и диагностировать точную причину. – MrFlick

+0

Я заменил функции cbind() для функций data.frame(), но не отрегулировал график вообще. Я запустил str (total_veg) и обнаружил, что действительно значение является фактором. Чтобы преобразовать его, я использовал as.numeric (as.character()) –

ответ

0

Значение является фактором, а не числовой (обнаружил это с помощью функции Str()).

Я использовал as.numeric (as.character()) для преобразования значения из коэффициента в числовой, который затем отображал данные в значимом порядке при построении графика. Спасибо @MrFlick за то, что указали мне в правильном направлении.

Смежные вопросы