我有一个数据框,其中包含多个类别的x轴数字分箱和连续的y轴数据。最初,我创建了一个箱形图,通过制作x轴箱子和#34;因素",并做了融化数据的箱线图。可重复的数据:
x <- seq(1,10,by=1)
y1 <- rnorm(10, mean=3)
y2 <- rnorm(10, mean=10)
y3<- rnorm(10, mean=1)
y4<- rnorm(10, mean=8)
y5<- rnorm(10, mean=12)
df <- data.frame(x,y1,y2,y3,y4,y5)
df.m <- melt(df, id="x")
我的代码将x轴数据创建为一个因素:
df.m $ x&lt; - as.factor(df.m $ x)
我的ggplot:
ggplot(df.m, aes(x=x, y=value))+
geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.1)+
theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))
结果情节: :
问题在于我不能使用x轴数字间距,因为x轴被分类为具有相等间距的因子。我希望能够使用像scale_x_continuous这样的东西来操纵轴断裂和间距,例如,间隔为2,而不是每1个盒子图,但是当我尝试用x轴绘制数据时#34; as.numeric&#34;,我只得到所有数据的一个箱线图:
有什么方法可以获得这种连续观察的箱线图曲线(第一张图像),同时仍能控制x轴的数字属性?谢谢!
答案 0 :(得分:22)
以下是使用您在Google上发布的原始数据的一种方法 - 实际上这对IMO更有帮助。
ggplot(df, aes(x=CH, y=value,group=CH))+
geom_boxplot(notch=FALSE, outlier.shape=NA, fill="red", alpha=0.2)+
scale_x_log10()
所以,正如@BenBolker在删除答案(??)之前说的那样,你应该把x变量(CH
)保留为数字,并在调用{{1}时设置group=CH
}}。
根据您的真实数据,还有另一个问题。你的aes(...)
或多或少是对数间隔的,所以大约有多少个点&lt; 1,因为有1到10之间,等等CH
想要使盒子的大小相同,所以使用线性x轴,盒子宽度小于线宽,你不要看到盒子。将x轴更改为对数刻度可以或多或少地修复。
答案 1 :(得分:0)
不要让x
成为一个因素。您需要在美学上映射group
,这是决定与该值相关联的框的因素,幸运的是,在融化后,这就是您variable
列的内容:
ggplot(df.m, aes(x = x, y = value, group = variable)) +
geom_boxplot()
由于x
仍为数字,因此您可以在特定variable
级别内为其提供所需的任何值,并且框图将显示在该位置。或者您可以转换x
轴等