Сюжетное форматирование легенд
Я излагаю средства сгруппированных данных, и у меня возникают проблемы с получением легенды, чтобы быть правильными. Текст настолько большой, что видны только названия двух групп, а не всех четырех. Я потратил много времени, пытаясь использовать cex-like
команды для изменения размера, но это не работает. Я пытался вращать их с las=3
, но это не работает.
Я не могу поделиться данными, но код здесь:
plot.question = function(number){
#which question to plot? get ID
question = names(sorted.by.n)[number]
#the formula
form = paste0("DF.scored.g.scale ~ ",question)
#fit it to data
fit = lm(form, DF.merged.g)
#get ANOVA results
fit.anova = anova(fit)
#get ANOVA p value
p.value = round(fit.anova[[5]][2],4) #p value
#plot it
plotmeans(as.formula(form), DF.merged.g,
ylab = "4 g-items sumscore",
xlab = "Answer",
main = paste0(questions.unique[question,"text"],"\nANOVA p=",p.value),
cex.main = .8,
cex.axis = .8,
cex.lab = .8,
cex.sub = .8,
las=3,) #size of main title
}
Предпочтительно, я хотел бы просто сделать текст меньше, чтобы он мог соответствовать. Как вариант, я бы хотел повернуть его так, чтобы он мог соответствовать (возможно, вместе с изменением поля). Если нет, то что еще?
Легенды можно подавить с помощью xaxt="n"
, но тогда нужно добавить их другим способом. Разве это не может быть сделано в рамках plotmeans()
функционировать?
1 ответ
Ну, я перепробовал много вещей, и это было единственное, что сработало. Очевидно, plotmeans() создает график, который вы никак не можете изменить. Единственное, что мне удалось сделать, - это наложить текст как новый текстовый сюжет поверх графика.
myfactor <- factor(rep(c('cat1','cat2','cat3'),20)) #make a factor
mynum <- runif(60) #make a numeric field
plotmeans(mynum ~ myfactor,xaxt='n') #plot them
labs <- paste(names(table(myfactor)), "") #make the names
par(new=T) #create new plot
a<-rev(as.numeric(unique(myfactor))) #count the unique factors to make a vector of their numbers to serve as the positions on the x axis
text(cex=1, x=a, y=0.2, labs, xpd=TRUE, srt=35) #insert the text on the graph.
#here you need to modify y according to your data to find the best place to plot them.
#In my case x=c(1,2,3) because I have 3 categories and y=0.2
#because this is the lowest value of the y axis. The srt argument rotates the text.
Вы, вероятно, должны иметь возможность либо исправить ось y, чтобы иметь стандартные значения, а затем использовать минимум этого числа в аргументе y текстовой функции для создания универсальной функции или вычислять минимальное значение оси y каждый раз.
Надеюсь, это поможет!