gpt4 book ai didi

r - 组织结构图三角图

转载 作者:行者123 更新时间:2023-12-04 01:42:49 24 4
gpt4 key购买 nike

我想创建一个带有组织结构(层次结构)的三角形图,显示不同公司每个级别的员 worker 数。

以下是一些示例数据:

mylabd <- data.frame (company = rep(c("A", "B", "C"), each = 7),
skillsDg = rep(c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT"), 3),
number = c(200, 100, 40, 30, 10, 0, 0,
220, 110, 35, 10, 0, 4, 1,
140, 80, 120, 50, 52, 52, 3)
)
company skillsDg number
1 A Basic 200
2 A HighSc 100
3 A Undgd 40
4 A MAST 30
5 A PHD 10
6 A EXPD 0
7 A EXECT 0
8 B Basic 220
9 B HighSc 110
10 B Undgd 35
11 B MAST 10
12 B PHD 0
13 B EXPD 4
14 B EXECT 1
15 C Basic 140
16 C HighSc 80
17 C Undgd 120
18 C MAST 50
19 C PHD 52
20 C EXPD 52
21 C EXECT 3

目标是反射(reflect)不同的公司如何雇用不同的技术 worker 或学位 worker 。

假设的数字是这样的(虽然颜色填充并不完美)。
enter image description here
这个想法是每个阶段的线宽成比例,然后线连接。如果后续级别没有类别,则不会连接(如在公司 B 中)。我找不到可以做到这一点的程序,也找不到。任何的想法 ?

编辑:

我不太了解 R,但这是我的想法是如何形成的。它将每个线段从一个点分成两部分,使其对称。然后连接绘制的水平线。

enter image description here

最佳答案

我不知道有任何函数可以这样做,但这里有一个从头开始:

my1 <- data.frame (company = rep(c("A", "B", "C"), each = 7), skillsDg = rep(c("Basic", "HighSc", "Undgd", "MAST", "PHD", "EXPD", "EXECT"), 3), number = c(200, 100, 40, 30, 10, 0, 0, 220, 110, 35, 10, 0, 4, 1, 140, 80, 120, 50, 52, 52, 3) )

my2 <- split(my1,my1$company) #split your dataframe into a list where each element is a company
# The next line create the layout
layout(matrix(1:(length(my2)+1), nrow=1), width=c(1,rep(4,length(my2))))
# Then we draw the x-axis:
par(mar=c(3,0,3,0))
plot(NA,axes=F, xlim=c(0,1),ylim=c(1,nlevels(my1$skillsDg)))
axis(side=4,tick=F,labels=unique(my1$skillsDg),
at=seq_along(unique(my1$skillsDg)), las=2, line=-4)
# Then we apply a graphing function to each company:
lapply(my2,function(x){
par(mar=c(3,0,3,0))
plot(NA, xlim=c(-max(my1$number),max(my1$number)),
ylim=c(1,nlevels(my1$skillsDg)),axes=F)
title(sub=x$company[1],line=1)
abline(h=seq_along(x$skillsDg), col="grey80")
polygon(x=c(x$number,rev(-1*x$number)),
y=c(seq_along(x$skillsDg),rev(seq_along(x$skillsDg))),
col=as.numeric(x$company))
})

enter image description here

编辑 :
您当然可以在 lapply 的绘图函数中添加任何您想要的内容。 (但在某些情况下,这可能意味着稍微改变图形的尺寸):
layout(matrix(1:(length(my2)+1), nrow=1), width=c(1,rep(4,length(my2))))
par(mar=c(3,0,3,0))
plot(NA,axes=F, xlim=c(0,1),ylim=c(1,nlevels(my1$skillsDg)))
axis(side=4,tick=F,labels=unique(my1$skillsDg),
at=seq_along(unique(my1$skillsDg)), las=2, line=-4)
lapply(my2,function(x){
par(mar=c(3,0,3,0))
plot(NA, xlim=c(-max(my1$number)-50,max(my1$number)+50),
ylim=c(1,nlevels(my1$skillsDg)),axes=F)
title(sub=x$company[1],line=1)
abline(h=seq_along(x$skillsDg), col="grey80")
text(x=x$number+5, y=seq_along(x$skillsDg)+.1, label=x$number, pos=4)
polygon(x=c(x$number,rev(-1*x$number)),
y=c(seq_along(x$skillsDg),rev(seq_along(x$skillsDg))),
col=as.numeric(x$company))
})

enter image description here

关于r - 组织结构图三角图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13992515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com