Легенды в барплоте не появляются должным образом

heights1=c(5,5,4.5,4,4,4,4.5,2,4,4)

opar <- par(lwd = 0.3)

barplot(heights1,xlim=c(0,3), ylim=c(0,5),  width=0.1, 
main="Langauges(Verbal & Non-verbal)", 
names.arg=c("Spanish", "Speak" , "English","Speak", "Hindi", 
"Speak", "Arabic", "Speak",  "Body Lang", "Speak"), ylab="Skill level ", 
xlab="Language starting with mostly used", col=c("darkblue","red"),
cex.names=0.7,space=c(2,0,2,0,2,0,2,0,2,0))

legend("top",  c("darkblue","red"), c("reading/Writing", "Speaking")  );

Синий - для "чтения/записи", а красный - для "говорящего". Как сделать исправление в легенде? (Я не хочу определять легенду внутри функции barplot)

enter image description here

Ответ 1

Вы можете использовать аргумент fill для ваших цветов. Как и в случае с Дэвидом Робинсоном, я бы также предложил разместить легенду в правом верхнем углу в этом случае.

legend("topright", 
       legend = c("reading/Writing", "Speaking"), 
       fill = c("darkblue", "red"))

enter image description here


Рассматривая некоторые из ваших других вопросов, вы также можете потратить некоторое время на то, чтобы ваши данные были в более подходящей форме перед графикой.

Вот пример:

  1. Вот ваши данные:

    heights1 = c(5, 5, 4.5, 4, 4, 4, 4.5, 2, 4, 4) # Your data
    
  2. Вот ваши данные как matrix с соответствующими dimnames

    mydata <- matrix(heights1, ncol = 2, byrow = TRUE,
                     dimnames = list(c("Spanish", "English", "Hindi", 
                                       "Arabic", "Body Lang"),
                                     c("Reading/Writing", "Speaking")))
    mydata # Much more meaningful to look at than a simple vector
    #           Reading/Writing Speaking
    # Spanish               5.0        5
    # English               4.5        4
    # Hindi                 4.0        4
    # Arabic                4.5        2
    # Body Lang             4.0        4
    
  3. Определите свои цвета (необязательно, но полезно, если вы работаете с несколькими парами в группе)

    colors <- c("darkblue", "red") # Define the colors you're using
    
  4. Поместите свои данные, добавив немного лишнего места наверху и подавляя ваши оси. Не уверен, почему вы не хотите включать легенду на этом этапе, но это легко сделать, добавив следующие аргументы: legend.text = TRUE, args.legend = list(x = "topright", bty = "n")

    barplot(t(mydata), beside = TRUE, col = colors, 
            ylim = c(0, 6), axes = FALSE,
            xlab = "Language starting with mostly used",
            main = "Languages (Verbal & Non-verbal)")
    
  5. Вновь добавьте свою ось y и добавьте свою легенду

    axis(2, at = 0:5, labels = 0:5)
    legend("topright", colnames(mydata), fill = colors, bty = "n")
    

    enter image description here

Ответ 2

Измените свою линию legend на

legend("topright", c("reading/Writing", "Speaking"), col=c("darkblue","red"), lwd=10);

В аргументе lwd говорится, что легенда должна иметь линии с толщиной в 10 пикселей каждого из соответствующих цветов. Это хорошая идея использовать "topright" а не "top" в вашем случае, чтобы легенда не появлялась под полосками.

enter image description here