2013-08-29 4 views
0

Я определил структуру данных для хранения ярлыков легенды следующим образом (потому что я хочу создавать многоуровневые графики с разными данными и разными метками в строке).Динамические метки легенд в ggplot2

legendlabels <- data.frame(
        'stadtland'=c("Core City\n(Agglomeration)","Municipality\n(Agglomeration)", "Isolated City", "Rural\nMunicipality"), 
        stringsAsFactors=FALSE) 

Теперь, когда я использую legendlabels в ggplot, как это,

... + 
scale_colour_hue(name="Type", 
        breaks=as.factor(c(1:4)), 
        labels=legendlabels['stadtland'], 
        l=65) + 
... 

легенда просто показывает "1", "2", "3", "4" для 4-х различных этикеток , Тем не менее, когда я вставляю вектор непосредственно (undynamically), строки которые будут отображаться правильно:

... + 
scale_colour_hue(name="Type", 
        breaks=as.factor(c(1:4)), 
        labels=c("Core City\n(Agglomeration)","Municipality\n(Agglomeration)", "Isolated City", "Rural\nMunicipality"), 
        l=65) + 
... 

Как я могу заменить это?

+0

Возможно, попробуйте 'labels = legendlabels [['stadtland']]' вместо этого? Не забывайте разницу между '' и '[['! – joran

+0

Отлично. Я забыл об этой разнице (или не понимаю). Если вы опубликуете это как ответ с небольшим объяснением разницы между '[]' и '[[]]', я соглашусь с ним. Спасибо! – wnstnsmth

ответ

3

Как я уже упоминал в своем комментарии,

labels=legendlabels['stadtland'] 

будет возвращать список длиной один, а не атомный вектор вы ищете. Вместо этого, вы хотите использовать [[:

labels=legendlabels[['stadtland']] 

, который возвращает элемент именем stadtland из списка (кадры данных списков) legendlabels.

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