2015-03-27 3 views
2

Итак, я пытаюсь добавить некоторые графики в свои заметки. Я создал простую функцию интереса, которая будет отображать несколько простых функций интереса, используя разные ставки, и я хотел бы добавить легенду, которая просто скажет ... «i =: 0%, x%, y%, z%» on одна единственная строка, где каждый 0, x, y, z находится в разном цвете представительной функции, используя эту процентную ставку.Справка по графическому графику в R

Я заглянул в функцию paste() и попытался сделать ее одной строкой, но я не уверен точно, как ее закодировать в int_seq и вытащить каждый отдельный индекс и сделать его другим цветом, а затем поместить его в один строка.

# indexs to be used 
t = 0:50 
int_seq = seq(0.025,0.10,by=0.025) # intere rate sequence 
colors = c("red","blue","green","orange") #colors of interest rate seq 
index = 1:length(int_seq) 

# AV Simple Interest (all good) 
avSimple = function(i,t){ 
av = (1 + (i * t)) 
return(av)} 

# Plot range for y-axis (all good) 
yrange = c(avSimple(min(int_seq),min(t)) * 0.95, 
avSimple(max(int_seq),max(t)) * 1.05) 

# Plots Simple Interest with different interest rates (all good) 
plot(t,avSimple(0,t), type="l", main = "AV Simple Interest", xlab = "Time", 
ylab = "AV", ylim = yrange) 
# loops through the int_seq and plots line based on interest rate 
# and specified color (all good) 
for (i in index) 
lines(t,avSimple(int_seq[i],t), col = colors[i]) 

# Adds legend to plot for different interest rates 
# !!This is where I need the help, not sure best way to approach!! 
legend(0,avSimple(0.075,50), c("i =: 0%", for (i in index) int_seq[i]), 
col = colors) 
+0

Вы можете пройти полный вектор в 'legend' (а также' lines'), так что вам не нужно будет 'for' петли, такие как:' легенды (0, avSimple (0,075 , 50), sprintf ('i =:% s %%', c (0, int_seq)), col = colors) 'Я не уверен, как вы хотите, чтобы легенда выглядела? – rawr

+0

'legend (0, avSimple (0.075,50), legend = paste0 (" i =: 0% ", int_seq [index]), col = colors, lty = 1)'? – lukeA

ответ

0

Не знаете, какую легенду вы хотите. Поскольку вы говорите в одной строке, вы можете добавить horiz = TRUE, но вот несколько других опций:

Вы можете передать полные векторы в legend, поэтому в этом случае нет необходимости в цикле. Просто создайте вектор меток, а также используйте вектор цветов, соответствующий каждой метке (которую вы уже сделали).

# indexs to be used 
t = 0:50 
int_seq = seq(0.025,0.10,by=0.025) # intere rate sequence 
colors = c("red","blue","green","orange") #colors of interest rate seq 
index = 1:length(int_seq) 

# AV Simple Interest (all good) 
avSimple = function(i,t){ 
    av = (1 + (i * t)) 
    return(av)} 

# Plot range for y-axis (all good) 
yrange = c(avSimple(min(int_seq),min(t)) * 0.95, 
      avSimple(max(int_seq),max(t)) * 1.05) 


plot(t, type="n", main = "AV Simple Interest", xlab = "Time", 
    ylab = "AV", ylim = yrange) 
# for (i in index) 
# lines(t,avSimple(int_seq[i],t), col = colors[i]) 

# Adds legend to plot for different interest rates 
# !!This is where I need the help, not sure best way to approach!! 

labs <- sprintf('i =: %s%%', c(0, int_seq)) 
labs2 <- paste0(c(0, int_seq), '%') 


legend('topleft', legend = labs, col = colors, lty = 1, title = 'normal') 

l <- legend('top', legend = rep('i =:', length(labs)), lty = 1, 
      col = colors, text.width = max(strwidth(labs)) + 1, 
      title = 'right-justified') 
text(l$rect$left + l$rect$w, l$text$y, labs2, pos = 2) 

legend('topright', legend = labs, text.col = colors, title = 'colored') 

legend('bottom', legend = labs, col = colors, lty = 1, horiz = TRUE, 
     cex = .7, title = 'horizontal') 

enter image description here

+0

Это лучший способ ответить на ответ «добавить комментарий»? Новое на этом сайте ... – JoeStat1986

+0

Самый лучший способ ответить на ответ - «добавить комментарий»? Новое на этом сайте ... Спасибо за ответы в первую очередь. Не совсем то, что я ищу. Может быть, легенда не преувеличивает то, что я хочу, потому что мне не нужна соответствующая строка, я просто хочу «i =: x%, y%, z%», но где x% - int_seq [1] с цветами [1], y% - int_seq [2] с цветами [2] и т. д. Нет необходимости в каких-либо цветных шрифтах, только цветные процентные ставки. Причина, по которой я хотел зацикливаться, так это то, что я могу просто изменить «int_seq» на любую последовательность и в то время как у меня есть цветовая последовательность большей или равной длины, она будет работать – JoeStat1986

+0

Так что, возможно, это лучший способ приблизиться к ней ... скажем, у меня есть последовательность процентных ставок i = c (w, x, y, z) и цветовая последовательность цвета = c («красный», «зеленый», «синий», «оранжевый»). Как я могу создать строку = «w, x, y, z», где w, x, y, z - разные цвета, но объединены в одну выровненную горизонтальную строку? – JoeStat1986

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