Как вызвать переупорядочение в пределах aes_string ggplot

Мне нужно переупорядочить барплот с высокого на низкий (слева направо), используя ggplot & aes_string(). Например, для кадра данных df <- f (X, Y, Z) это можно сделать с помощью

 ggplot(top10,aes(x=reorder(X,-Y),y=Y,fill=X) + geom_bar(stat="identity")

Но мне нужно добиться этого, ссылаясь на номера столбцов данных, а не на имена столбцов, как показано ниже.

 ggplot(top10, aes_string(x=colnames(top10)[num1],y=meanFeat, 
 fill=colnames(top10)[num1])) +  geom_bar(stat="identity")

Приведенное выше утверждение отображает выходные данные с использованием номеров столбцов. Однако он не меняет порядок с высокого на низкое (слева направо)

Как я могу использовать функцию повторного заказа в aes_string для достижения этой цели?

1 ответ

Решение

Поскольку aes_string работает со строками, используйте paste:

ggplot(top10, aes_string(x=paste0("reorder(",colnames(top10)[num1],", -Y)"),y=meanFeat,
 fill=colnames(top10)[num1])) +  geom_bar(stat="identity")

С последней версией ggplot вы должны использовать aes с !! а также sym() превратить ваши строки в символы.

ggplot(top10, 
  aes(
    x = reorder(!!sym(colnames(top10)[num1]), meanFeat),
    y = meanFeat, 
    fill=!!sym(colnames(top10)[num1]))) +  
  geom_bar(stat="identity")
Другие вопросы по тегам