تغيير ترتيب الحانات المهرب في Barplot GGPlot2

StackOverflow https://stackoverflow.com/questions/1721536

  •  19-09-2019
  •  | 
  •  

سؤال

لدي dataframe df.all وأنا أخطط لها في قطعة أرض مع ggplot2 باستخدام الرمز أدناه. أود أن أجعله حتى يتم قلب ترتيب القضبان المتهرب من النفايات. وهذا هو، بحيث تأتي القضبان المسمى "المفرد" قبل أن تسمى القضبان "الجمع".

ggplot(df.all, aes(gram, V1, fill=number)) + 
    geom_bar(stat="identity", position="dodge") + 
    scale_x_discrete(labels=c("Grammatical","Ungrammatical")) +
    scale_y_continuous(formatter="percent", limits=c(0,1)) +
    facet_grid(. ~ experiment) + 
    scale_fill_hue("Attractor", breaks=c("S","P"), labels=c("Singular","Plural"))

لقد حاولت القيام به levels(df.all$number) = c("S", "P") التفكير في أنه ربما يستخدم Ggplot ترتيب المستويات لتقرير ترتيب التخطيط، ولكن هذا لم ينجح. لست متأكدا مما يجب تجربته. أيه أفكار؟

محتويات df.all, ، في حالة أنه مفيد:

> df.all
  number gram     experiment        V1
1      S    G BERIMBAU_AGR_A 0.8133333
2      S    G BERIMBAU_AGR_B 0.8658537
3      S    U BERIMBAU_AGR_A 0.5436242
4      S    U BERIMBAU_AGR_B 0.4597701
5      P    G BERIMBAU_AGR_A 0.8580645
6      P    G BERIMBAU_AGR_B 0.8536585
7      P    U BERIMBAU_AGR_A 0.3087248
8      P    U BERIMBAU_AGR_B 0.3975904

> str(df.all)
'data.frame':   8 obs. of  4 variables:
 $ number    : Factor w/ 2 levels "S","P": 2 2 2 2 1 1 1 1
  ..- attr(*, "scores")= num [1:2(1d)] 0 -1
  .. ..- attr(*, "dimnames")=List of 1
  .. .. ..$ : chr  "P" "S"
 $ gram      : Factor w/ 2 levels "G","U": 1 1 2 2 1 1 2 2
 $ experiment: Factor w/ 4 levels "BERIMBAU_AGR_A",..: 1 4 1 4 1 4 1 4
 $ V1        : num  0.813 0.866 0.544 0.46 0.858 ...
هل كانت مفيدة؟

المحلول 3

قدم هادلي حلا. إليك تكرار المشكلة والحل.

الهدف هو الحصول على القضبان المسمى "S" للمجيء قبل أن تسمى القضبان "P". هذا لا يحدث افتراضيا لأن R وطلبات مستويات أبجديا.

df <- read.csv("http://pealco.net/code/ggplot_dodge/df.txt")
ggplot(df, aes(gram, V1, fill=number))
    + geom_bar(stat="identity", position="dodge")

كما علق هادلي في إجابة أخرى، "تحتاج إلى إعادة ترتيب بناء على المتغيرات X، وليس متغير y". رغم أنني لست متأكدا من السبب في أن هذا يعمل.

لقلب ترتيب العوامل في هذا المثال، يمكنك تحويل العامل إلى رقمي وضربه بواسطة -1.

df <- with(df, df[order(gram, -as.numeric(number)), ])

ما زلت أحب بعض التفسير حول السبب df <- with(df, df[order(gram, -as.numeric(number)), ]) يعمل.

نصائح أخرى

أظن df.all$number يحتاج إلى أن يكون عاملا أمرا. يحاول df.all$number <- ordered(df.all$number)

في بعض الحالات، لا أعتقد أن هذا ممكن:

layerCake<-data.frame(group=c(rep("normal",4),rep("tumor",4)),
                      class=factor(rep(c("exon","intron","intergenic","unmapped"),2),levels=rev(c("exon","intron","intergenic","unmapped")),ordered=TRUE),
                      fraction=c(.02,.25,.50,.23,.015,.20,.555,.23)
)
layerCake[layerCake$group=='normal',"reads"]<-130948403*layerCake[layerCake$group=='normal',"fraction"]
layerCake[layerCake$group=='tumor',"reads"]<-200948403*layerCake[layerCake$group=='tumor',"fraction"]
g<-ggplot(layerCake, aes(x=factor(group),y=reads, fill=factor(class),order = as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))

الترتيب الصحيح في مكدسة:
g + geom_bar (stat = "الهوية"، الوضع = "stack")enter image description here

ترتيب غير صحيح في دودج:

g+geom_bar(stat="identity",position="dodge")

enter image description here

دعونا نحاول عكس النظام في GGPLOT:

g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")

لا النرد

دعونا نحاول إعادة ترتيب إطار البيانات

lc <- with(lc, lc[order(-as.numeric(class)), ])
g<-ggplot(lc, aes(x=factor(group),y=reads, fill=factor(class),order = -as.numeric(class)))+xlab("Group")+scale_fill_discrete(name="Anno Class",breaks=c("exon","intron","intergenic","unmapped"))
g+geom_bar(stat="identity",position="dodge")

لا

تغيير مستويات العامل حقا يغير ترتيب القضبان المهرب! pitfall الشائع: لا تزال الألوان تبقى في وضع معين، لذا فإن أخذ نظرة سريعة يجعلها تبدو وكأن الطلب لم يتغير. ولكن إذا نظرت إلى القيم، سترى أن الأمر قد تغير بالفعل.

تحرير: إجابتي السابقة أدناه فقط تغيير النظام من مخطط الألوان المعطى للحانات. لا يزال هذا مفيدا، حيث قد نريد في كثير من الأحيان عكس نظام الألوان في نفس الوقت كمغير ترتيب الحانات:

كنت أستخدم Scale_fill_manual لأنني أردت ملء ألوان أشرطة بلدي يدويا.

ggplot(data, aes_string(x = "countries", y = "population", fill = "agegroups")) +
scale_fill_manual(values = CustomColorFunction(), limits = (levels(data$agegroups)))

أمضى 5 ساعات من العبث مع مستويات العامل المتغيرة وترتيب آمال الإطار DataSted هذا يساعد على شخص ما!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top