R 将不存在的因子添加到ggplot2条形图

R 将不存在的因子添加到ggplot2条形图,r,ggplot2,factors,R,Ggplot2,Factors,我有一个从M1到M11的因子的理论范围。在数据中,M1到M3和M5不存在。如何使用所有Ms(不仅是现有Ms)绘制ggplot2条形图,以便M1到M3和M5也显示在x轴上?您的问题是不可复制的,因此我将用独立代码进行说明 如果你要跑的话 你会得到 如果您希望将未使用的级别添加到系数(cyl)中,您可以使用缩放x_离散使用限制和drop=F 比如说 ggplot(mtcars, aes(factor(cyl))) + geom_bar() + scale_x_discrete(limits =

我有一个从M1到M11的因子的理论范围。在数据中,M1到M3和M5不存在。如何使用所有Ms(不仅是现有Ms)绘制ggplot2条形图,以便M1到M3和M5也显示在x轴上?

您的问题是不可复制的,因此我将用独立代码进行说明

如果你要跑的话

你会得到

如果您希望将未使用的级别添加到系数(cyl)中,您可以使用
缩放x_离散
使用
限制
drop=F

比如说

ggplot(mtcars, aes(factor(cyl))) + geom_bar() + 
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)
将产生


您的问题是不可重复的,因此我将用一个独立的代码进行说明

如果你要跑的话

你会得到

如果您希望将未使用的级别添加到系数(cyl)中,您可以使用
缩放x_离散
使用
限制
drop=F

比如说

ggplot(mtcars, aes(factor(cyl))) + geom_bar() + 
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)
将产生


您的问题是不可重复的,因此我将用一个独立的代码进行说明

如果你要跑的话

你会得到

如果您希望将未使用的级别添加到系数(cyl)中,您可以使用
缩放x_离散
使用
限制
drop=F

比如说

ggplot(mtcars, aes(factor(cyl))) + geom_bar() + 
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)
将产生


您的问题是不可重复的,因此我将用一个独立的代码进行说明

如果你要跑的话

你会得到

如果您希望将未使用的级别添加到系数(cyl)中,您可以使用
缩放x_离散
使用
限制
drop=F

比如说

ggplot(mtcars, aes(factor(cyl))) + geom_bar() + 
scale_x_discrete(limits = c(1, 2, levels(factor(mtcars$cyl)), 10), drop=FALSE)
将产生


如果您的因子在某一点上能够具有所有这些水平,那么设置因子的水平比将其添加到限制(当您
ggplot
it时)更有意义。因此:

cyl
设为从M开始的系数(仅限M4、M6和M8)

增加级别:

mtcars$cyl = factor(mtcars$cyl, levels=paste("M",1:10,sep=""))
现在,在您的
ggplot
中,它只是一个
drop=FALSE

ggplot(mtcars, aes(cyl)) + geom_bar() + scale_x_discrete(drop=FALSE)

为什么我认为这样更好?好吧,因为您已经将数据的一个方面(可能的级别)与数据本身绑定,而不是一个绘图函数。假设您有一组绘图函数,现在您必须在每个函数中对该级别进行编码。将可能的水平放在因子中,信息随数据一起传递。您所需要做的就是在绘图时决定
drop=FALSE
drop=TRUE

如果您的因子能够在某个点上具有所有这些级别,那么设置因子的级别比在
ggplot
it时将其添加到限制更有意义。因此:

cyl
设为从M开始的系数(仅限M4、M6和M8)

增加级别:

mtcars$cyl = factor(mtcars$cyl, levels=paste("M",1:10,sep=""))
现在,在您的
ggplot
中,它只是一个
drop=FALSE

ggplot(mtcars, aes(cyl)) + geom_bar() + scale_x_discrete(drop=FALSE)

为什么我认为这样更好?好吧,因为您已经将数据的一个方面(可能的级别)与数据本身绑定,而不是一个绘图函数。假设您有一组绘图函数,现在您必须在每个函数中对该级别进行编码。将可能的水平放在因子中,信息随数据一起传递。您所需要做的就是在绘图时决定
drop=FALSE
drop=TRUE

如果您的因子能够在某个点上具有所有这些级别,那么设置因子的级别比在
ggplot
it时将其添加到限制更有意义。因此:

cyl
设为从M开始的系数(仅限M4、M6和M8)

增加级别:

mtcars$cyl = factor(mtcars$cyl, levels=paste("M",1:10,sep=""))
现在,在您的
ggplot
中,它只是一个
drop=FALSE

ggplot(mtcars, aes(cyl)) + geom_bar() + scale_x_discrete(drop=FALSE)

为什么我认为这样更好?好吧,因为您已经将数据的一个方面(可能的级别)与数据本身绑定,而不是一个绘图函数。假设您有一组绘图函数,现在您必须在每个函数中对该级别进行编码。将可能的水平放在因子中,信息随数据一起传递。您所需要做的就是在绘图时决定
drop=FALSE
drop=TRUE

如果您的因子能够在某个点上具有所有这些级别,那么设置因子的级别比在
ggplot
it时将其添加到限制更有意义。因此:

cyl
设为从M开始的系数(仅限M4、M6和M8)

增加级别:

mtcars$cyl = factor(mtcars$cyl, levels=paste("M",1:10,sep=""))
现在,在您的
ggplot
中,它只是一个
drop=FALSE

ggplot(mtcars, aes(cyl)) + geom_bar() + scale_x_discrete(drop=FALSE)

为什么我认为这样更好?好吧,因为您已经将数据的一个方面(可能的级别)与数据本身绑定,而不是一个绘图函数。假设您有一组绘图函数,现在您必须在每个函数中对该级别进行编码。将可能的水平放在因子中,信息随数据一起传递。您需要做的就是在绘图时决定
drop=FALSE
drop=TRUE

添加
+比例x_离散(drop=FALSE)
不可能,因为数据中不存在M1到M3和M5。级别:M10 M11 M4 M6 M7 M8 M9请参见下面关于可复制示例的建议答案Add
+scale\u x_离散(drop=FALSE)
不可能,因为数据中不存在M1到M3和M5。级别:M10 M11 M4 M6 M7 M8 M9请参见下面关于可复制示例的建议答案Add
+scale\u x_离散(drop=FALSE)
不可能,因为数据中不存在M1到M3和M5。级别:M10 M11 M4 M6 M7 M8 M9请参见下面关于可复制示例的建议答案Add
+scale\u x_离散(drop=FALSE)
不可能,因为数据中不存在M1到M3和M5。级别:M10 M11 M4 M6 M7 M8 M9参见下面关于可复制示例的建议答案