2016-06-30 1 views
1

У меня есть вопрос относительно порядка данных в моем geom_bar.ggplot2 geom_bar ... как сохранить порядок данных.frame

Это мой набор данных:

SM_P,Spotted melanosis on palm,16.2 
    DM_P,Diffuse melanosis on palm,78.6 
    SM_T,Spotted melanosis on trunk,57.3 
    DM_T,Diffuse melanosis on trunk,20.6 
    LEU_M,Leuco melanosis,17 
    WB_M,Whole body melanosis,8.4 
    SK_P,Spotted keratosis on palm,35.4 
    DK_P,Diffuse keratosis on palm,23.5 
    SK_S,Spotted keratosis on sole,66 
    DK_S,Diffuse keratosis on sole,52.8 
    CH_BRON,Dorsal keratosis,39 
    LIV_EN,Chronic bronchities,6 
    DOR,Liver enlargement,2.4 
    CARCI,Carcinoma,1 

поручаю следующие COLNAMES:

colnames(df) <- c("abbr", "derma", "prevalence") # Assign row and column names 

Тогда я сюжет:

ggplot(data=df, aes(x=derma, y=prevalence)) + geom_bar(stat="identity") + coord_flip() 

Plot

Почему ggplot2 рэнд omly изменить порядок моих данных. Я хотел бы иметь порядок моих данных в соответствии с моим data.frame.

Любая помощь очень ценится!

+0

Это не случайно, это алфавитный. См. Здесь для решения http://stackoverflow.com/questions/3253641/change-the-order-of-a-discrete-x-scale – arvi1000

+0

Прежде всего спасибо за ваш ответ. Если я применяю 'derma_table <- таблица (ДФ $ дермы) derma_levels <- имена (derma_table) [порядка (ДФ $ распространенность)] ДФА $ derma2 <- фактор (DF $ дермы, уровни = derma_levels)', а затем plot 'ggplot (data = df, aes (x = derma, y ​​= prevalence)) + geom_bar (stat =" identity ") + coord_flip()' отображает то же, что и в моем вопросе. На самом деле команды только изменяют data.frame в алфавитном порядке, что именно то, что я хотел бы избежать ' – Jonas

+0

, вы повторно выравниваете коэффициент' derma2', но затем используете 'x = derma' – arvi1000

ответ

3

Публикация как ответ, потому что поток комментариев длинный. Вы должны указать порядок, используя уровни фактора переменной, карта с aes(x=...)

# lock in factor level order 
df$derma <- factor(df$derma, levels = df$derma) 

# plot 
ggplot(data=df, aes(x=derma, y=prevalence)) + 
    geom_bar(stat="identity") + coord_flip() 

Результат, тот же порядок, как и в df: enter image description here

# or, order by prevalence: 
df$derma <- factor(df$derma, levels = df$derma[order(df$prevalence)]) 

же команда сюжет дает:

enter image description here


я прочитал в данных, как это:

read.table(text= 
"SM_P,Spotted melanosis on palm,16.2 
DM_P,Diffuse melanosis on palm,78.6 
SM_T,Spotted melanosis on trunk,57.3 
DM_T,Diffuse melanosis on trunk,20.6 
LEU_M,Leuco melanosis,17 
WB_M,Whole body melanosis,8.4 
SK_P,Spotted keratosis on palm,35.4 
DK_P,Diffuse keratosis on palm,23.5 
SK_S,Spotted keratosis on sole,66 
DK_S,Diffuse keratosis on sole,52.8 
CH_BRON,Dorsal keratosis,39 
LIV_EN,Chronic bronchities,6 
DOR,Liver enlargement,2.4 
CARCI,Carcinoma,1", header=F, sep=',') 
colnames(df) <- c("abbr", "derma", "prevalence") # Assign row and column names 
+0

Спасибо за ваши усилия! Я очень ценю вашу помощь! Удалили ли вы несколько строк из кода, который вы разместили? Когда я пытаюсь выполнить код, я не получаю те же метки. – Jonas

+0

Единственное, что я не публиковал, это код, который я использовал для чтения в ваших данных. теперь добавлено. – arvi1000

+0

Странно ... Я получаю другую ось. В любом случае, большое вам спасибо за ваши усилия! Очень признателен! :) – Jonas

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

  • Нет связанных вопросов^_^