Сюжетное форматирование легенд

Я излагаю средства сгруппированных данных, и у меня возникают проблемы с получением легенды, чтобы быть правильными. Текст настолько большой, что видны только названия двух групп, а не всех четырех. Я потратил много времени, пытаясь использовать 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 каждый раз.

Надеюсь, это поможет!

Другие вопросы по тегам