2014-07-27 5 views
1

Я пытаюсь добавить пользовательскую легенду к сюжету lattice, но я не могу сделать так, как хочу. Ниже мой код. Я хочу сделать легенду для сюжета lattice, который похож на тот, который был создан с использованием mtext(), но с символами, которые я использовал с помощью legend. Было бы здорово, если бы я мог сделать мужскую и женскую символы более темными или разными цветами. Спасибо.Пользовательская легенда R-графики (решетка)

plot.new() 
legend("bottom", legend = c("\u2640 12h Ant", "\u2640 4d Ant", "\u2640 3h Ant", 
          "\u2640 24h Ant", "\u2640 48h Ant", "\u2640 72h Ant", "\u2640 4d HT", 
          "\u2640 3h HT", "\u2640 24h HT", "\u2640 48h HT", "\u2640 72h HT", 
          "\u2642 4d Ant", "\u2642 4d HT"), 
     bty = "n", 
     xjust = 0, 
     ncol = 7, 
     lwd = 2, cex = 0.8, 
     col = c("red","blue","green","pink","maroon4", 
       "cyan3","blue","green","pink","maroon4","cyan3", "blue", "blue"), 
     lty = c(NA, NA, NA), 
     pch = c(15,15,15,15,15,15,19,19,19,19,19,17,2)) 


#I want to make one legend like this, but mtext cannot add symbols :(
mtext("Antennae: 
     \u2640 12h 4d 3h 24h 48h 72h \u2642 4d 
     Head+Thorax: 
     \u2640 12h 4d 3h 24h 48h 72h \u2642 4d 
     ", side = 1, padj=1, adj=0, line=FALSE, outer=FALSE) 

Here is my current plot, I want to change the legend to include male and female symbols

Update: Здесь небольшие набор данных data

Здесь R код для генерации графа Треллис: вопрос

#Command to load packages, not all needed 
library("RColorBrewer") 
library("gplots") 
library("plyr") 
library("lattice") 
library("Hmisc") 
library("latticeExtra") 
library("scatterplot3d") 
library("plotrix") 
library("scales") 

#Command clears the console 
rm(list=ls()) 
#Command sets the working directory 
setwd("/set-your-path-here") 
miRs<-read.table("stackoverflow.csv", header=TRUE, sep=",") 
attach(miRs) 
head(miRs) 
miRs.st<-stack(miRs[,2:14]) 
head(miRs.st) 
miRs.st[,"miRs"]<-miRs[,1] 
head(miRs.st) 
summary(miRs.st$ind) 
miRs.st$ind<-factor(miRs.st$ind, levels=c("Fem12hAnt", "Fem4dAnt", "Fem3hAnt", 
              "Fem24hAnt", "Fem48hAnt", "Fem72hAnt", "Fem4dHT", 
              "Fem3hHT", "Fem24hHT", "Fem48hHT", "Fem72hHT", 
              "Male4dAnt", "Male4dHT")) 

#create list of symbols to use in the legend 
supsym <- trellis.par.get("superpose.symbol") 
supsym$col <- c("red","blue","green","pink","maroon4","cyan3","blue","green","pink","maroon4","cyan3", "blue", "blue") 
supsym$fill <- c("red","blue","green","pink","maroon4","cyan3","blue","green","pink","maroon4","cyan3", "blue", "blue") 
supsym$pch <- c(15,15,15,15,15,15,19,19,19,19,19,17,2) 
supsym$cex <- c(.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5,.5) # otherwise symbol 15 appears a bit larger 
trellis.par.set("superpose.symbol",supsym) 

#set log scales in the axis 
options(scipen=10) 
options(digits=10) 

#set background color to each gene, can change the color of those genes of interest 
bgColors <- c("gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "red", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44", 
       "gray44", "gray80", "gray44", "gray80", "gray44") 

#color of the text in the plot 
txtColors <- c("white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white", 
       "white", "black", "white", "black", "white") 

# Create a function to be passes to "strip=" argument of xyplot 
myStripStyle <- function(which.panel, factor.levels, ...) { 
    panel.rect(0, 0, 1, 1, 
      col = bgColors[which.panel], 
      border = 1) 
    panel.text(x = 0.5, y = 0.5, 
      font=2, 
      lab = factor.levels[which.panel], 
      col = txtColors[which.panel]) 
}  

#plot the trellis graph 
print(xyplot(values~ind|miRs,groups=ind,data=miRs.st, 
      layout=c(5,5),as.table=TRUE, 
      type="p", 
      par.strip.text=list(custBgCol=bgColors, 
           custTxtCol=txtColors), 
      strip=myStripStyle, 
      auto.key=list(space="bottom",columns=5, pch=8, cex=.8), 
      relation="same", 
      scales = list(x = list(draw = FALSE), y = list(log = 10)), 
      yscale.components = yscale.components.log10ticks, 
      main="miRs Expression", 
      xlab="", 
      ylab=expression('Number of Reads'))) 
+0

Я в замешательстве. Как это связано с решеткой? 'legend()' - базовая графическая функция, а также 'mtext'. И что вы подразумеваете под «символами»? Можете ли вы ссылаться на изображение, демонстрируя, что вы хотите изменить? Даже грубое изображение MSPaint очень помогло бы. – MrFlick

+0

@MrFlick Прошу прощения, я забыл упомянуть, что я планирую график Trellis с решеткой. Я знаю, что это основные функции графа. Параметры auto.key используют данные из моего набора данных для создания легенды. Поэтому его трудно изменить, чтобы создать пользовательскую легенду. Я опубликую изображение графика, которое у меня есть, и что мне нужно изменить. Спасибо. – degopwn

+0

Если вы хотите построить это с помощью решетки, вы не сможете легко смешивать 'mtext' или' legend' с решетчатой ​​графикой. Было бы лучше, если бы вы дали код для генерации графика решетки с [* минимальным * воспроизводимым] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) набор данных - даже поддельных данных для двух панелей будет достаточно. Есть способы настроить автоматически сгенерированный ключ. Кроме того, я не совсем уверен, что делает «mtext», как для вас, потому что он смотрит на меня. Можете ли вы добавить изображение своего желаемого результата? – MrFlick

ответ

1

У меня было несколько личных обсуждение с автором вопроса, который, как мне кажется, будет удовлетворен легендой emented в lattice вместо base, который просто требует модификации auto.key аргумента вызова к xyplot() Используя тот же код, как описано выше, попробуйте этот вызов xyplot(), указав текст легенды прямо в auto.key аргумент: text=c("\u2640 12h Ant", "\u2640 4d Ant", "\u2640 3h Ant", "\u2640 24h Ant", "\u2640 48h Ant", "\u2640 72h Ant", "\u2640 4d HT", "\u2640 3h HT", "\u2640 24h HT", "\u2640 48h HT", "\u2640 72h HT", "\u2642 4d Ant", "\u2642 4d HT"):

print(xyplot(values~ind|miRs, groups=ind, data=miRs.st, 
     layout=c(5,5), as.table=TRUE, type="p", 
     par.strip.text=list(custBgCol=bgColors, custTxtCol=txtColors), 
     strip=myStripStyle, 
     auto.key=list(text=c("\u2640 12h Ant", "\u2640 4d Ant", "\u2640 3h Ant", "\u2640 24h Ant", "\u2640 48h Ant", "\u2640 72h Ant", "\u2640 4d HT", "\u2640 3h HT", "\u2640 24h HT", "\u2640 48h HT", "\u2640 72h HT", "\u2642 4d Ant", "\u2642 4d HT"), space="bottom", columns=5, pch=8, cex=.8), 
     relation="same", 
     scales = list(x = list(draw = FALSE), y = list(log = 10)), 
     yscale.components = yscale.components.log10ticks, 
     main="miRs Expression", 
     xlab="", 
     ylab=expression('Number of Reads'))) 
+0

Отлично работает. Благодарю. – degopwn

0

MrFlick является пока без ответа так Я собираюсь исходить из предположения, что вы действительно хотели получить базовое графическое решение. Текстовая функция может отображать за пределами рамки пользовательской координаты, если для параметра «xpd» установлено значение «ИСТИНА», либо в парном вызове, либо в самом текстовом вызове. Функция локатора возвращает ху значение после первого нажатия один раз на окне HTE участка, чтобы изменить фокус и затем снова в центре, где вы хотите, чтобы эта дополнительная легенда/аннотацию:

text(locator(1), "Antennae: 
     \u2640 12h 4d 3h 24h 48h 72h \u2642 4d 
     Head+Thorax: 
     \u2640 12h 4d 3h 24h 48h 72h \u2642 4d 
     ", xpd=TRUE) 

enter image description here

На данный момент запрос также касается местоположения (именно поэтому я дал вариант locator(). Также можно использовать шрифты Hershey, используя его астрологические символы, где самец «Марс», а самка - «Венера»

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