我有一个因子和一个数字向量。当我使用
绘制这些时plot(factor ~ vector, data)
它看起来像这样:
但我希望它看起来像这样:
,y轴代表(累积)频率。
问题是,当我告诉R使用线条绘图时,R告诉我
In rect(xleft, ybottom, xright, ytop, col = col, ...) :
graphical parameter "type" is obsolete
那我该怎么做?
基础图()而不是ggplot或某些解决方案的附加点。不必要的颜色可以是灰度值。
示例数据:
a.factor <- c("level1", "level1", "level1", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level3", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level2", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level1", "level1", "level1", "level2", "level1", "level1", "level2", "level1", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level1", "level2", "level1", "level1", "level1", "level1", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level2", "level2", "level2", "level2", "level1", "level1", "level2", "level1", "level2", "level2", "level2", "level2", "level2", "level1", "level2", "level2", "level1", "level2", "level2", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level2", "level1", "level2", "level2", "level2", "level1", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level2", "level2", "level2", "level2", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level3", "level1", "level1", "level1", "level3", "level2", "level1", "level2", "level2", "level1", "level1", "level2", "level2", "level2", "level2", "level2", "level2", "level1", "level1", "level1", "level1", "level1", "level1", "level2", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level2", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level1", "level2", "level2", "level2", "level1", "level2", "level2", "level2", "level2", "level1", "level2", "level2", "level1", "level1")
b.vector <- c(314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 314, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 315, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 316, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 317, 318, 318, 318, 318, 318, 318, 318, 319, 319, 319, 319, 319, 320, 320, 320, 320, 320, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321, 321)
dat <- data.frame(a.factor, b.vector)
plot(a.factor ~ b.vector, dat)
答案 0 :(得分:3)
这是使用ggplot和geom_area的解决方案。为了正确地强制堆叠数据中不存在的组合,需要进行一些聚合。
library(ggplot2)
library(data.table)
setDT(dat)
dat_agg <-as.data.table(table(dat)) #thanks @Maju116; sometimes I do things too complicated.
#plot
p1 <- ggplot(dat_agg,
aes(x = b.vector, y = N,group = a.factor)) +
geom_area(aes(fill = a.factor), position = "stack")
p1
dat <- data.frame(a.factor, b.vector)
需要将数据转换为一系列x和y坐标以绘制多边形。它们需要处于正确的顺序('较低'范围,增加x和'上'范围,在此示例中减少x)。
#calculate 'upper range' of each polygon
#using cumsum as they're stacked
max_points <- apply(table(dat),MARGIN=2,cumsum)
#lower range for first level is 0, for other levels
#lower range is upper range of level below it.
min_points <- rbind(0, max_points[1:2,ncol(max_points):1]) #reverse order
rownames(min_points) <- rownames(max_points)
#combine
polydata <- cbind(max_points,min_points)
#x position
x_vector <- as.numeric(colnames(polydata))
#colors
mycols <- c("red","blue","green")
#plotting (empty plot first, then add polygons)
plot(x=b.vector, y=seq(0,100,length.out=length(b.vector)),type="n",
ylab="frequency")
lapply(1:nrow(polydata),function(i){
polygon(x=x_vector, y=as.numeric(polydata[i,]),col=mycols[i])
})
legend(x=320, y=100, legend=rownames(polydata),fill=mycols)
答案 1 :(得分:0)