ggplot2:如何手动修复条形图出现的顺序
ggplot2: How to manually fix the order in which bars appear
我正在 for 循环中使用 ggplot 绘制和保存多个图,循环遍历列表。示例列表元素如下所示:
head(genes[[1]])
name fc fdr
gene1 -2.0143529 0.0002
protein1 -3.2256188 0.0001
我使用了以下代码来绘制:
p<-list()
for(i in 1:length(genes)){
p[[i]]<-ggplot(genes[[i]], aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
省略处理格式化的附加代码。最终的情节是这样的:
现在,问题是我正在使用 for 循环绘制 100 多个这样的图,我希望始终将基因(列表元素中的第一行)保持在顶部栏,将蛋白质保持在顶部栏成为底部栏,因为我省略了所有标签并计划为所有图使用一个图例。但是,ggplot 会不断切换不同绘图之间的条形顺序。有没有办法确保这种情况不会发生并且基因始终保持在最前面?
谢谢,
哈希
ggplot
将按名称的字母顺序对条形图进行排序。
例如
library(ggplot2)
df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003))
ggplot(df, aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
dev.off()
要按照您需要的顺序获取条形图,请将名称变量作为一个因子,并设置级别的顺序。只有两个名字,你可以使用 relevel
如下
library(ggplot2)
df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003))
df$name <- relevel(df$name, as.character(df$name[2]))
ggplot(df, aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
dev.off()
这使得第二行(蛋白质)成为原点旁边的条。
我正在 for 循环中使用 ggplot 绘制和保存多个图,循环遍历列表。示例列表元素如下所示:
head(genes[[1]])
name fc fdr
gene1 -2.0143529 0.0002
protein1 -3.2256188 0.0001
我使用了以下代码来绘制:
p<-list()
for(i in 1:length(genes)){
p[[i]]<-ggplot(genes[[i]], aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
省略处理格式化的附加代码。最终的情节是这样的:
现在,问题是我正在使用 for 循环绘制 100 多个这样的图,我希望始终将基因(列表元素中的第一行)保持在顶部栏,将蛋白质保持在顶部栏成为底部栏,因为我省略了所有标签并计划为所有图使用一个图例。但是,ggplot 会不断切换不同绘图之间的条形顺序。有没有办法确保这种情况不会发生并且基因始终保持在最前面? 谢谢, 哈希
ggplot
将按名称的字母顺序对条形图进行排序。
例如
library(ggplot2)
df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003))
ggplot(df, aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
dev.off()
要按照您需要的顺序获取条形图,请将名称变量作为一个因子,并设置级别的顺序。只有两个名字,你可以使用 relevel
如下
library(ggplot2)
df <- data.frame(name = c("A-gene", "B-protein"), fc = c(-2.2, -3.2), fdr = c(0.2, 0.003))
df$name <- relevel(df$name, as.character(df$name[2]))
ggplot(df, aes(name,fc, label= name))+
geom_col(aes(fill=factor(fdr < 0.05)), position = "dodge", width = 1)+
coord_flip()+scale_fill_manual(values = c("#00BFC4","#F8766D"))
dev.off()
这使得第二行(蛋白质)成为原点旁边的条。