2013-05-15 2 views
0

Я создаю гравюру 3x3, используя приведенный ниже код. Проблема в том, что я не получаю никакой легенды.Добавление легенды в ggplot с facet_grid

# Create column vectors 
XID <- rep(c(1,5,10), each=57) 
TAD.unit <- c(0, 0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24, 36, 48, 72) 
TAD <- rep(TAD.unit, length=length(XID)) 
FID <-rep(c(1,2,3),each=length(TAD.unit),length=length(XID)) 
time <- TAD + (FID-1)*14*24 
dist1 <- pweibull(TAD,2,2) 
dist2 <- pweibull(TAD,2,4) 

# Create data frame 
data.df <- as.data.frame(cbind(XID,time, FID, dist1, dist2, TAD)) 

library(ggplot2) 
label_both = function(column,value){paste(column,"=",value)} 

# Create plot 
my.plot1 <- ggplot(data.df, aes(x=TAD, y=dist1)) + geom_point() + 
    geom_line(aes(x=TAD, y=dist2)) + 
    facet_grid(XID ~ FID, labeller=label_both) + 
    labs(x = "TAD", y = "Response") 

# alternative data structure per recommendation in 
# http://stackoverflow.com/questions/15418302/ggplot2-how-to-show-the-legend?rq=1 
library(reshape) 
df.2 <- melt(data.df, id=c("XID","FID","TAD","time")) 

Я попытался с помощью кадра данных df.2, чтобы увидеть, если это помогает в соответствии с рекомендацией в переполнение стека нити я предоставить ссылку. Я пробовал разные команды ggplot, но я до сих пор не могу заставить его работать. Может кто-нибудь, пожалуйста, помогите мне?

Также, как я могу разместить легенду где-то внутри 3x3, где пустое пространство?

спасибо!

ответ

0

Что касается рисунка легенды, используйте ваш расплавленный информационный кадр и, например, используйте цвет, чтобы отличить два набора данных расстояния. Например. как это:

ggplot(df.2, aes(x=TAD, y=value, colour = variable)) + geom_line() + facet_grid(XID ~ FID, labeller=label_both) + labs(x = "TAD", y = "Response") 

И как для позиционирования легенды, я отсылаю вас к этому вопросу с хорошим ответом:

Position legend in first plot of facet

+0

Спасибо за этот совет! Я хочу подготовить сюжет для рукописи, поэтому я предпочитаю держать вещи черно-белыми и иметь только символ для одного ответа и линию для другого, чтобы визуально различать лучше между двумя ответами. Любые предложения в этом отношении? –

+0

Вместо 'color = variable' используйте' shape = variable'. Более подробную информацию о том, как отличить разные наборы данных, можно найти здесь: http://docs.ggplot2.org/current/aes_linetype_size_shape.html – thunk

+0

Еще раз спасибо 'thunk'. Shape = Variable сохраняет вещи ч/б, но создает две строки, хотя и не легенда. Я могу, конечно, изменить стиль линии, чтобы различать. Дело в том, что я предоставил образцы данных для SO. Реальные данные таковы, что две линии будут практически перекрываться. Поэтому я хочу, чтобы geom_point() для одной переменной и geom_line() для другой. В этом контексте я хочу создать легенду. –