如何修改我的 R 代码来绘制这种甘特图?
Posted
技术标签:
【中文标题】如何修改我的 R 代码来绘制这种甘特图?【英文标题】:How to modify my R code to plot this kind of gantt chart? 【发布时间】:2012-05-16 09:26:44 【问题描述】:大家
使用 R 中的以下代码,我显示了一个简单的甘特图:
dat <- read.csv2(text="start;duration
1;4
7;3
15;2
")
plot(NA, xlim=c(0,20), ylim=c(0,9), ylab="",xlab="X", xaxt="n", yaxt="n")
with(dat, segments(x0=start, x1=start+duration, y0=2,y1=2))
with(dat, text( start+duration/2, 2.5, labels=duration))
axis(1, at=seq(0,20,by=2), labels=seq(0,20,by=2))
现在我如何修改此代码,以便能够从 csv
文件中的这些数据中获取:
A; 2; 7;
B; 5; 10;
C; 5; 12;
D; 16; 22;
E; 18; 20;
绘制这样的甘特图
非常感谢您的回复!
【问题讨论】:
可能重复:LINK @TylerRinker,非常感谢您的帖子。我试过了!它工作正常,但仍然缺少一些东西:如何处理形状球的线条末端和它标记的线条?感谢您的宝贵时间! 【参考方案1】:扩展@Tyler Rinker 建议的答案:
library(ggplot2)
df <- read.table(text="Task, Start, End
A,2,7
B,5,10
C,5,12
D,16,22
E,18,20",
header=TRUE,
sep = ',')
p <- ggplot(df, aes(colour=Task))
p <- p + theme_bw()
p <- p + geom_segment(aes(x=Start,
xend=End,
y=Task,
yend=Task),
size=2)
p <- p + geom_point(aes(x=Start,
y=Task),
size=5)
p <- p + geom_point(aes(x=End,
y=Task),
size=5)
p <- p + geom_text(aes(x=Start-0.5,
y=Task,
label=Task),
fontface="bold")
p <- p + opts(legend.position="None",
panel.grid.major = theme_blank(),
axis.text.y = theme_blank())
p <- p + xlab("Duration")
p
生产:
编辑以生成居中标签
library(ggplot2)
df <- read.table(text="Task, Start, End
A,2,7
B,5,10
C,5,12
D,16,22
E,18,20",
header=TRUE,
sep = ',')
df$TaskLabel <- df$Task
df$Task <- as.numeric(df$Task)
p <- ggplot(df, aes(colour=TaskLabel))
p <- p + theme_bw()
p <- p + geom_segment(aes(x=Start,
xend=End,
y=Task,
yend=Task),
size=2)
p <- p + geom_point(aes(x=Start,
y=Task),
size=5)
p <- p + geom_point(aes(x=End,
y=Task),
size=5)
p <- p + geom_text(aes(x=(Start+End)/2,
y=Task+0.25,
label=TaskLabel),
fontface="bold")
p <- p + opts(legend.position="None",
panel.grid.major = theme_blank(),
axis.text.y = theme_blank())
p <- p + xlab("Duration")
p
这又会产生:
【讨论】:
谢谢你的代码,很简单很好。如何使标签以关联行为中心。感谢您的宝贵时间。 @FopaLéonConstantin -- 这需要在代码的几个地方进行更改,我认为最好再次给你整个配方。享受吧! 非常感谢您的回复!【参考方案2】:使用包vistime
:
install.packages('vistime')
library(vistime)
df <- read.table(text="Task, Start, End
A,2,7
B,5,10
C,5,12
D,16,22
E,18,20", header=TRUE, sep = ',')
df$Start <- as.Date("2017-01-01") + df$Start
df$End <- as.Date("2017-01-01") + df$End
vistime(df, start="Start", end="End", events="Task")
https://github.com/shosaco/vistime
【讨论】:
以上是关于如何修改我的 R 代码来绘制这种甘特图?的主要内容,如果未能解决你的问题,请参考以下文章