2015-03-17 1 views
0

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

Я просмотрел несколько примеров вопросов и ответов от переполнения стека и не могу понять, как сделать следующее:

  1. центра значения (должны быть округлены до двух знаков после запятой) в каждой секции сложенные бары, прямо сейчас я просто их компенсировал сверху.
  2. Как изменить текст легенды с «BB» на греческий «нижняя альфа, нижняя альфа», «BD» на греческую «нижнюю альфу, более низкую бету» и «DD» на греческую «более низкую бета-версию, более низкую бета», ,

Вот несколько примеров данных и кода с копией сюжета, который он создает.

Karotype.Data <- structure(list(Location = structure(c(1L, 1L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 4L, 4L, 1L, 1L, 1L, 4L, 2L, 1L, 2L, 1L, 2L, 2L, 2L, 2L, 2L), .Label = c("Kampinge", "Kaseberga", "Molle", "Steninge"), class = "factor"), Substrate = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 3L, 4L, 2L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 3L, 2L, 1L, 4L, 2L), .Label = c("Kampinge", "Kaseberga", "Molle", "Steninge"), class = "factor"), Karyotype = structure(c(1L, 3L, 4L, 1L, 3L, 3L, 4L, 4L, 4L, 3L, 1L, 4L, 3L, 4L, 2L, 3L, 1L, 4L, 3L, 2L, 4L, 3L, 4L, 2L, 3L), .Label = c("", "BB", "BD", "DD"), class = "factor")), .Names = c("Location", "Substrate", "Karyotype"), row.names = c(135L, 136L, 137L, 138L, 139L, 165L, 166L, 167L, 168L, 169L, 236L, 237L, 238L, 239L, 240L, 326L, 327L, 328L, 329L, 330L, 426L, 427L, 428L, 429L, 430L), class = "data.frame") 

z.counts <- Karotype.Data %>% 
    group_by(Location,Substrate,Karyotype) %>% 
    summarise(Frequency=n()) 

z.freq <- z.counts %>% filter(Karyotype != '') %>% 
    group_by(Location,Substrate) %>% 
    mutate(Percent=Frequency/sum(Frequency)) 
z.freq 

ggplot(z.freq, aes(x=Substrate, y=Percent, fill=Karyotype)) + 
    geom_bar(stat="identity") + 
    geom_text(aes(label = Percent), size = 5, vjust = 1, position = "stack") + 
    facet_wrap(~ Location, ncol=2) + 
    scale_y_continuous(name="Percentage") + 
    theme(strip.text.x = element_text(colour="black", size=20, face="bold"), 
     axis.title.x = element_text(colour="black", size=20, face="bold", vjust=-0.5), 
     axis.text.x = element_text(colour="black", size=18), 
     axis.title.y = element_text(colour="black", size=20,face="bold", vjust=1), 
     axis.text.y = element_text(colour="black", size=18), 
     legend.title = element_text(colour="black", size=20, face="bold"), 
     legend.text = element_text(colour="black", size = 18), 
     legend.position="bottom") 

enter image description here

ответ

1

Чтобы добавить греческие буквы в легенде, вы можете изменить цветовую гамму с scale_colour_manual():

test = data.frame(x=1:30,y=1:30,label=rep(c("BB","BD","DD"),each=10)) 
ggplot(test) + geom_point(aes(x=x,y=y,color=label)) + scale_colour_manual(values=c(1,2,3),breaks = c("BB","BD","DD"),labels = list(bquote(alpha~alpha),bquote(alpha~beta),bquote(beta~beta))) 

аргумент values устанавливает цвет, breaks устанавливает точки останова (BB , BD и DD) и labels устанавливает нужные вам греческие буквы.

Чтобы обойти легенду, вы можете добавить еще один столбец в свой блок данных, установив значения в круглые (Процент, цифры = 3) и использовать этот столбец в geom_text.

Информацию о греческих письмах в ggplot2 можно найти here