2013-09-19 2 views
1

Использование пакета wordcloud в R Я хотел бы поместить различные слова в соответствии с категориальной переменной в наборе данных. Скажем, мои данные следующим образом:цветные категории в r wordclouds

name weight group 
1 Aba  10 x 
2 Bcd  20 y 
3 Cde  30 z 
4 Def  5 x 

А вот как dput:

dat <- structure(list(name = c("Aba", "Bcd", "Cde", "Def"), weight = c(10, 
    20, 30, 5), group= c("x", "y", "z", "x")), .Names = c("name", 
    "weight", "group"), row.names = c(NA, -4L), class = "data.frame") 

Есть ли способ в Wordcloud(), чтобы цвет названия их группы (х, у, г) или следует ли использовать другое программное обеспечение/пакеты?

+1

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

+0

Спасибо Tyler, эти данные помогают уточнить? Итак, Том и Стеф будут одного цвета, потому что они оба в группе (x), но поскольку я устанавливаю freq (mydata $ weight), то tom будет обладать большим, чем steph в облаке. – barker

+0

Я отредактировал, чтобы сделать ваши данные более удобными для работы. –

ответ

2

Он будет автоматически выбирать из списка цветов по частоте или по порядку слов, если указан ordered.colors.

name = c("Aba","Bcd","Cde","Def") 
weight = c(10,20,30,5) 
colorlist = c("red","blue","green","red") 

wordcloud(name, weight, colors=colorlist, ordered.colors=TRUE) 

four-elements

Приведенный выше пример работает для независимых переменных. В кадре данных, цвет спецификация будет сохранена в качестве фактора, и он должен будет быть преобразован в текст, обернув его в as.character так:

wordcloud(df$name, df$weight, colors=as.character(df$color), ordered.colors=TRUE) 

Если вы просто факторы и не список цветов , вы можете создать параллель с несколькими строками.

#general solution for any number of categories 
basecolors = rainbow(length(unique(group))) 
# solution for known categories 
basecolors = c("red","green","blue") 

group = c("x","y","z","x") 
# find position of group in list of groups, and select that matching color... 
colorlist = basecolors[ match(group,unique(group)) ] 
+1

Вам нужны другие группы, такие как 'x, y, z', или у вас уже есть определения цвета в вашей таблице данных? Он развивается по мере того, как ваш вопрос редактируется ... – beroe

+0

спасибо за помощь beroe, я дал этот снимок, но я все еще получаю недопустимые цветовые спецификации. У меня около 1000 записей в таблице, которые я пытаюсь использовать, поэтому я не уверен, что ваше решение применимо к моей ситуации. Но лучше было бы предоставить общее решение, чтобы другие могли найти это полезным. Еще раз спасибо! – barker

+1

Недопустимая спецификация заключается в том, что в кадре данных ваши имена цветов интерпретируются как факторы. Оберните их в 'as.character' следующим образом:' wordcloud (df $ name, df $ weight, colors = as.character (df $ color), ordered.colors = TRUE) ' – beroe

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