我意识到这个问题的标题可能有点令人困惑,我想要解决的是以下内容。假设我有以下数据框:
total_cash_and_card <- data.frame(amount_type=as.character(c('cash', 'cash', 'cash', 'cash', 'cash', 'cash', 'card', 'card', 'card', 'card', 'card', 'card')),
user_id=as.character(c('Blah_1', 'Blah_17', 'abcd1', 'user27', 'foobar', 'scrum', 'abcd1', 'foobar', 'Blah_1', 'Blah_17', 'user27', 'scrum')),
total=as.numeric(c(47,21,17,9,2,1,55,45,32,12,10,3)),
stringsAsFactors=FALSE)
我制作了以下图表(使用以下代码):
g = ggplot(data=total_cash_and_card, aes(x = user_id, y = total, fill=amount_type)) +
geom_bar(colour="black", stat="identity",
position=position_dodge(),
size=.3) +
labs(x="", y="Amount", caption="(based on sample data)", title='Cash Amount vs Card Amount') +
theme_few(base_size = 10) +
scale_color_few() +
theme(axis.text.x=element_text(angle = 45, hjust = 1))
#theme(
#axis.text.y = element_blank())
#axis.ticks.y = element_blank())
p = ggplotly(g)
p = layout(p, margin = m, showlegend = TRUE)
p
我如何重新排序我的绘图,以便当x轴(aka user_id)属于'card'类别(由amount_type列指示)时,根据'total'从左到右排序? (即如何重新排列我的情节,以便红色条从最大到最小,从左到右移动?)。希望我的问题足够清楚,并提前感谢您的帮助!
答案 0 :(得分:1)
我删除了需要其他软件包的theme_few
和ggplotly
(根据eipi10&#39的评论)。在这种情况下,您需要做的是确定您希望user_id
进入的顺序,然后使用factor
来应用该订单。
library(tidyverse) #for dplyr and ggplot2
order <- total_cash_and_card %>%
filter(amount_type == "card") %>%
pull(user_id)
ggplot(data=total_cash_and_card, aes(x = factor(user_id, order), y = total, fill=amount_type)) +
geom_col(colour="black", position=position_dodge(), size=.3) +
labs(x="", y="Amount", caption="(based on sample data)", title='Cash Amount vs Card Amount')