具有不同 x 轴刻度的多个图形
Multiple graphs with different x-axis ticks
我有以下 data.frame:
ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
我想创建两个图,一个用于 X2 中的每个组。
这是我的代码和获得的情节:
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y')
问题是 x 轴是按字母顺序排列的,我不知道如何解决。我尝试添加 scale_x_discrete
,但我不知道如何分隔组。你可以在下面看到我添加这个参数得到的图 link:
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y') +
scale_x_discrete(limits=ef2$X1)
已编辑:我无法更改 ef2 data.frame。我在另一个 data.frame:
中尝试了排序因素
ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
ef2$X1 <- as.character(ef2$X1)
nou <- data.frame(X1=factor(ef2$X1), levels=ef2$X1, X2=ef2$X2, value=ef2$value)
但是没用。
这对我有用,但我不确定它是否正是您需要的:
ef2 <- data.frame(X1=factor(c('50','100','bb','aa'), levels = c('50','100','bb','aa')), X2=c('A','A','B','B'), value=c(1,4,3,6))
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y')
根据这个post:Avoid ggplot sorting the x-axis while plotting geom_bar()
ggplot 自动排序,除非你提供一个已经排序的因子。
更新:
您使用的代码有错误。 levels
是 factor
函数的参数。
试试这个:
ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
ef2$X1 <- factor(ef2$X1, levels = unique(ef2$X1))
我有以下 data.frame:
ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
我想创建两个图,一个用于 X2 中的每个组。
这是我的代码和获得的情节:
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y')
问题是 x 轴是按字母顺序排列的,我不知道如何解决。我尝试添加 scale_x_discrete
,但我不知道如何分隔组。你可以在下面看到我添加这个参数得到的图 link:
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y') +
scale_x_discrete(limits=ef2$X1)
已编辑:我无法更改 ef2 data.frame。我在另一个 data.frame:
中尝试了排序因素ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
ef2$X1 <- as.character(ef2$X1)
nou <- data.frame(X1=factor(ef2$X1), levels=ef2$X1, X2=ef2$X2, value=ef2$value)
但是没用。
这对我有用,但我不确定它是否正是您需要的:
ef2 <- data.frame(X1=factor(c('50','100','bb','aa'), levels = c('50','100','bb','aa')), X2=c('A','A','B','B'), value=c(1,4,3,6))
ggplot(data=ef2, aes(x=X1, y=value, group=X2)) +
facet_grid(.~X2, scales="free_x") +
geom_line(size=1) +
geom_point(size=3) +
xlab('') +
ylab('Y')
根据这个post:Avoid ggplot sorting the x-axis while plotting geom_bar() ggplot 自动排序,除非你提供一个已经排序的因子。
更新:
您使用的代码有错误。 levels
是 factor
函数的参数。
试试这个:
ef2 <- data.frame(X1=c(50,100,'bb','aa'), X2=c('A','A','B','B'), value=c(1,4,3,6))
ef2$X1 <- factor(ef2$X1, levels = unique(ef2$X1))