用这个假人data.frame

ts <- data.frame(x=1:3, y=c("blue", "white", "white"), z=c("one", "one", "two"))

我试着在顶部用"蓝色"类别进行绘图.

ggplot(ts, aes(z, x, fill=factor(y, levels=c("blue","white" )))) + geom_bar(stat = "identity")

enter image description here

上面是"白色".和

ggplot(ts, aes(z, x, fill=factor(y, levels=c("white", "blue")))) + geom_bar(stat = "identity")

enter image description here

反转 colored颜色 ,但仍在顶部显示"白色".我怎样才能把"蓝色"放在上面?

推荐答案

我以前也遇到过同样的问题.ggplot似乎是根据条形图在数据框中的外观来堆叠条形图的.因此,问题的解决方案是按填充因子对数据进行排序,排序顺序与您希望它出现在图例中的顺序相反:底部项目位于数据框顶部,顶部项目位于底部:

ggplot(ts[order(ts$y, decreasing = T),],
       aes(z, x, fill=factor(y, levels=c("blue","white" )))) + 
  geom_bar(stat = "identity")

enter image description here

Edit: More illustration

使用样本数据,我创建了三个具有不同数据帧顺序的图,我认为更多填充变量会让事情变得更清楚.

set.seed(123)
library(gridExtra)
df <- data.frame(x=rep(c(1,2),each=5),
                 fill_var=rep(LETTERS[1:5], 2),
                 y=1)
#original order   
p1 <- ggplot(df, aes(x=x,y=y,fill=fill_var))+
  geom_bar(stat="identity") + labs(title="Original dataframe")


#random order
p2 <- ggplot(df[sample(1:10),],aes(x=x,y=y,fill=fill_var))+
  geom_bar(stat="identity") + labs(title="Random order")
#legend checks out, sequence wird

#reverse order
p3 <- ggplot(df[order(df$fill_var,decreasing=T),],
             aes(x=x,y=y,fill=fill_var))+
  geom_bar(stat="identity") + labs(title="Reverse sort by fill")

plots <- list(p1,p2,p3)

do.call(grid.arrange,plots)

enter image description here

R相关问答推荐

分组时间连续值

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

是否可以 Select 安装不带文档的R包以更有效地存储?

使用ggplot将平滑线添加到条形图

在R底座中更改白天和夜晚的背景 colored颜色

如何对数据集进行逆向工程?

使用gggrassure减少地块之间的空间

如何在R中合并和合并多个rabrame?

如何在kableextra调用cell_spec()中忽略NA?

我不能在docker中加载sf

在某些栏和某些条件下,替换dfs列表中的NA

删除具有相同标题的tabPanel(shinly)

条形图和在Ploly中悬停的问题

如何读取CSV的特定列时,给定标题作为向量

使用`Watch()`和`renderUI()`时,不再满足仍出现在SHILINY AFTER条件中的条件输入

使用R中的dist()迭代ID匹配的欧几里德距离

有没有一种方法可以同时对rhandsontable进行排序和从rhandsontable中删除?

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

通过比较来自多个数据框的值和R中的条件来添加新列

把代码写成dplyr中的group_by/摘要更简洁吗?