2016-11-20 3 views
0

Я искал в some topics, и я нашел основную идею построения графика скрипки, но когда я объединю эти сценарии в шахте (я покажу это ниже), результаты недопустимы. кажется, что рисовать скрипичный сюжет с нуля проще, чем преобразовать планку в скрипичный сюжет.Как преобразовать плангист ggplot2 в скрипичный сюжет

Q: У меня есть сюжет сценария бар, и я пытаюсь преобразовать его в скрипичном сюжет (same as this),

бы вы помочь мне в этом отношении? (Заранее спасибо)

dat <- data.frame(
    FunctionClass = factor(c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "Y", "Z"), levels=c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "Y", "Z")), 
    legend = c("A: RNA processing and modification", "B: Chromatin structure and dynamics", "C: Energy production and conversion", "D: Cell cycle control, cell division, chromosome partitioning", "E: Amino acid transport and metabolism", "F: Nucleotide transport and metabolism", "G: Carbohydrate transport and metabolism", "H: Coenzyme transport and metabolism", "I: Lipid transport and metabolism", "J: Translation, ribosomal structure and biogenesis", "K: Transcription", "L: Replication, recombination and repair", "M: Cell wall/membrane/envelope biogenesis", "N: Cell motility", "O: Posttranslational modification, protein turnover, chaperones", "P: Inorganic ion transport and metabolism", "Q: Secondary metabolites biosynthesis, transport and catabolism", "R: General function prediction only", "S: Function unknown", "T: Signal transduction mechanisms", "U: Intracellular trafficking, secretion, and vesicular transport", "V: Defense mechanisms", "W: Extracellular structures", "Y: Nuclear structure", "Z: Cytoskeleton"), 
    Frequency = c(360,391,897,1558,1168,448,1030,536,732,1292,2221,2098,789,117,1744,732,437,5162,1251,2191,603,216,2,14,739) 
) 
library(ggplot2) 
ggplot(data=dat, aes(x=FunctionClass, y=Frequency, fill=legend)) + 
    geom_bar(stat="identity", position=position_dodge(), colour="black") 
    scale_colour_gradientn(colours=rainbow(36)) 
+1

скрипка участок визуализирует * распределение *. У вас нет дистрибутивов, у вас есть одиночные числа. Как вы ожидаете, как будет выглядеть скрипка? –

+0

После получения данных о распределении, посмотрите на 'geom_violin' в' ggplot2' –

+0

Дорогой Конрад, привет и спасибо. Я видел несколько примеров изменения гистограмм и гистограмм на скрипичных графиках [link] (http://www.sthda.com/english/wiki/ggplot2-violin-plot-quick-start-guide-r-software-and- визуализация данных), поэтому я стал подозревать в преобразовании моей гистограммы в скрипичный сюжет или в сюжет. Итак, мои данные просто показывают, сколько транскриптов связано с каждой категорией. Как я могу сделать их визуально более привлекательными? – Farbod

ответ

0

Я согласен с @KonradRudolph, что листать сюжет и показывать этикетки на графике, а не в легенде, это лучший способ пойти сюда. Ниже приведен пример. Я не думаю, что вам нужно покрасить полоски, но я оставил раскраску в приведенном ниже примере. Если различные значения х относятся к нескольким естественным категориям, это может иметь смысл окрашивать эти категории. Вы также можете пометить столбцы счетчиками и процентами, и я также привел пример этого.

library(ggplot2) 

# Create a new label column for the x axis 
dat$x = gsub(".: ", "", dat$legend) 
dat$x = factor(dat$x, levels=dat$x) 

ggplot(data=dat, aes(x=x, y=Frequency, fill=x)) + 
    geom_bar(stat="identity", colour="black", show.legend=FALSE) + 
    geom_text(aes(
    label=ifelse(Frequency>700, paste0(Frequency, " (",sprintf("%1.1f", Frequency/sum(Frequency)*100),"%)"), 
       ifelse(Frequency>300, Frequency, "")), y=0.5*Frequency), 
    colour="white", size=2.5) + 
    scale_colour_gradientn(colours=rainbow(36)) + 
    coord_flip() + theme_bw() + labs(x="") 

enter image description here

+0

Уважаемый eipi10, Привет. Спасибо за вашу помощь и красивый гениальный график и время, которое вы потратили на меня. У меня есть еще два вопроса. (1) - это новый граф, основанный на числах, которые я привел в моем примере? (поскольку я не мог понять, были ли вы использованы значения, которые я использовал для «частоты» и «легенды». (2) есть ли способ вставить имя каждого столбца в нем как пример Конрада? (http: // imgur .com/a/4muZk). Еще раз спасибо – Farbod

+0

(1) Да Длины бара и метки с подсчетами и процентами поступают из 'Frequency'. Для меток оси x я создал новый столбец под названием' x' ('dat $ x = gsub (". "," ", dat $ legend)', который использует значения 'legend', но с буквами (например,' A: ',' ​​B: 'и т. д.) удалено (2) Да, но большинство названий слишком длинны, чтобы поместиться внутри баров. Однако, если вы этого хотели, просто используйте 'geom_text', как в моем коде, но используйте значения легенды, а не счет и проценты. – eipi10

+0

Большое спасибо.Этот ответ был очень информативным для меня. жаль, что мне не хватает «репутации» stackoverflow, чтобы проголосовать за ваши действия. – Farbod

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