我想在X轴上按一个类别组织我的数据,但是按照另一个类别对其进行着色,如下例所示:
图1,没有着色:
require(ggplot2)
nocolor <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) +
geom_dotplot(binaxis="y", stackdir = "center")
print(nocolor)
Run Code Online (Sandbox Code Playgroud)
图2,带着色:
nododge <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp, fill=as.factor(gear))) +
geom_dotplot(binaxis="y", stackdir = "center")
print(nododge)
Run Code Online (Sandbox Code Playgroud)
引入着色后发生的一个问题是属于不同组的点不再相互闪避.这会导致我的真实数据出现问题,因为我得到的点恰好具有相同的值并且完全相互模糊.
然后我尝试了这个,但它使我的数据乱码:
图3:
garbled <- ggplot(mtcars, aes(x=as.factor(cyl), y=disp)) +
geom_dotplot(binaxis="y", stackdir = "center", fill=as.factor(mtcars$gear))
print(garbled)
Run Code Online (Sandbox Code Playgroud)
点相互躲闪,但着色只是随机的,并不符合实际数据.
我期望这个问题的答案可以解决我的问题,但着色仍然是随机的:
图4:
graphdata <- mtcars
graphdata$colorname <- as.factor(graphdata$gear)
levels(graphdata$colorname) <- c("red", "blue", "black")
jalapic <- ggplot(graphdata, aes(x=as.factor(cyl), y=disp)) +
geom_dotplot(binaxis="y", stackdir = "center", fill=as.character(graphdata$colorname))
print(jalapic)
Run Code Online (Sandbox Code Playgroud)
有没有人知道如何让图#2中的点相互躲闪,或者如何修复图3或图4中的着色?我真的很感激任何帮助,谢谢.
我facet_grid()第一次尝试使用。我用自己的数据绘制了直方图,当我手动计算图形上的框时,分布似乎不准确。我使用mtcars数据复制了我的代码,问题似乎仍然存在。
这是 ggplot 生成的直方图:
dfrm <- mtcars
dfrm$am <- factor(dfrm$am, levels = c(0,1), labels = c("Automatic", "Manual"))
dfrm$vs <- factor(dfrm$vs, levels = c(0,1), labels = c("V-engine", "Straight-Engine"))
require(ggplot2)
ggplot(dfrm, aes(x=dfrm[,"mpg"], fill=dfrm[,"am"], colour=dfrm[,"am"])) +
geom_histogram(colour="transparent", position = "identity", alpha=0.2, bins = 10) +
facet_grid(. ~ dfrm[,"vs"])
Run Code Online (Sandbox Code Playgroud)
当我在直方图上手动计数时,我计算:
此代码计算实际数据中存在的数量:
require(pastecs)
by(data=dfrm$am, INDICES = dfrm$vs, table)
Run Code Online (Sandbox Code Playgroud)
结果是:
难道我做错了什么?有没有更好的方式来分面,或者这是一个错误?
我还用基本包做了直方图来检查结果是否匹配,当我计算盒子时,这些看起来是准确的。
hist(mtcars[which(mtcars[,"am"]==0 & mtcars[,"vs"]==0),"mpg"], xlim=c(10, 35), col=rgb(0.1,0.1,0.1,0.5), breaks=10)
hist(mtcars[which(mtcars[,"am"]==1 …Run Code Online (Sandbox Code Playgroud)