Gantt Chart

plotting
gadfly

#1

Hello,
I want to draw a gnatt chart for a particular schedule using Gadfly. I have the start times of all products for a given machine and also its processing times.
Can you please tell me how to do that?
Thanks!


#2

I like the idea of Gadfly plotting Gnat charts, but if you mean Gantt you could try:

for an idea. But I don’t think there’s anything specifically for that.


#3
using DataFrames, Gadfly

D1 = DataFrame(y = Int[1, 2, 3, 4],
    ylab=["Collect data", "Clean data", "Analyze data", "Write report"],
    x = Date.(["2017-04-01", "2018-04-01", "2018-06-01", "2019-04-01"]),
    xend = Date.(["2018-04-01", "2018-06-01", "2019-04-01", "2020-04-01"]),
    id = ["a","b","b","c"]
)
ylabdict = Dict(i=>D1[:ylab][i] for i in 1:4)

coord = Coord.cartesian(ymin=0.4, ymax=4.6)
p = plot(D1, coord,
    layer(x=:x, xend=:xend, y=:y, yend=:y, color=:id, Geom.segment, Theme(line_width=10mm)), 
    Scale.y_continuous(labels=i->get(ylabdict,i,"")),
    Guide.xlabel("Time"), Guide.ylabel(""),
    Theme(key_position=:none) 
)

Gantt


#4

btw @Rahul_Sharma if the above solution works for you, then please use this action button on the post:

discourse_solved


#5

Can you please tell me what all packages are required for this? I tried running this code, but it threw errors.


#6

I added the packages in the first line of code above. I’m using Julia 0.6.1. Please post any errors.


#7

it shows

LoadError: MethodError: no method matching size(::String)
Closest candidates are ---*bla bla*
while loading *address of my file* 
in expression starting from line * D1 = DataFrame(...*
in broadcast at base/broadcast.jl:230
in broadcast_t at base/broadcast.jl:213
in broadcast_shape at base/broadcast.jl:31

#8

I can generate that error in Julia 0.5:

> Date.("2017-04-01","2018-04-01")

ERROR: MethodError: no method matching size(::String)
Closest candidates are: *bla bla*
   ...
 in broadcast_shape(::String, ::String) at .\broadcast.jl:31
 in broadcast_t(::Type{T}, ::Type{Any}, ::String, ::Vararg{String,N}) at .\broadcast.jl:213
 in broadcast(::Type{T}, ::String, ::String) at .\broadcast.jl:230

#9

Did you enclose the dates in a vector (note the square brackets)?:

Date.(["2017-04-01","2018-04-01"])

#10

Oh thanks. That was the issue it seems. Sorry for bothering you for such a silly mistake.