Как вызвать переупорядочение в пределах 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")