Most interaction with Gadfly is through the plot
function. Plots are described by binding data to aesthetics, and specifying a number of elements including Scales , Coordinates , Guides , and Geometries . Aesthetics are a set of special named variables that are mapped to a geometry. How this mapping occurs is defined by the elements.
This "grammar of graphics" approach tries to avoid arcane incantations and special cases, instead approaching the problem as if one were drawing a wiring diagram: data is connected to aesthetics, which act as input leads, and elements, each self-contained with well-defined inputs and outputs, are connected and combined to produce the desired result.
Along with the standard plot methods operating on DataFrames and Arrays described in the Tutorial , Gadfly has some special signatures to make plotting functions and expressions more convenient.
plot(f::Function, lower, upper, elements...; mapping...)
plot(fs::Vector{T}, lower, upper, elements...; mapping...) where T <: Base.Callable
plot(f::Function, xmin, xmax, ymin, ymax, elements...; mapping...)
spy(M::AbstractMatrix, elements...; mapping...) -> Plot
For example:
p1 = plot([sin,cos], 0, 2pi)
p2 = plot((x,y)->sin(x)+cos(y), 0, 2pi, 0, 2pi)
p3 = spy(ones(33)*sin.(0:(pi/16):2pi)' + cos.(0:(pi/16):2pi)*ones(33)')
hstack(p1,p2,p3)
x
0
10
20
30
40
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4.0
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5.0
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
6.0
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
7.0
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
8.0
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9.0
9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
10.0
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
11.0
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
12.0
12.1
12.2
12.3
12.4
12.5
12.6
12.7
12.8
12.9
13.0
13.1
13.2
13.3
13.4
13.5
13.6
13.7
13.8
13.9
14.0
14.1
14.2
14.3
14.4
14.5
14.6
14.7
14.8
14.9
15.0
15.1
15.2
15.3
15.4
15.5
15.6
15.7
15.8
15.9
16.0
16.1
16.2
16.3
16.4
16.5
16.6
16.7
16.8
16.9
17.0
17.1
17.2
17.3
17.4
17.5
17.6
17.7
17.8
17.9
18.0
18.1
18.2
18.3
18.4
18.5
18.6
18.7
18.8
18.9
19.0
19.1
19.2
19.3
19.4
19.5
19.6
19.7
19.8
19.9
20.0
20.1
20.2
20.3
20.4
20.5
20.6
20.7
20.8
20.9
21.0
21.1
21.2
21.3
21.4
21.5
21.6
21.7
21.8
21.9
22.0
22.1
22.2
22.3
22.4
22.5
22.6
22.7
22.8
22.9
23.0
23.1
23.2
23.3
23.4
23.5
23.6
23.7
23.8
23.9
24.0
24.1
24.2
24.3
24.4
24.5
24.6
24.7
24.8
24.9
25.0
25.1
25.2
25.3
25.4
25.5
25.6
25.7
25.8
25.9
26.0
26.1
26.2
26.3
26.4
26.5
26.6
26.7
26.8
26.9
27.0
27.1
27.2
27.3
27.4
27.5
27.6
27.7
27.8
27.9
28.0
28.1
28.2
28.3
28.4
28.5
28.6
28.7
28.8
28.9
29.0
29.1
29.2
29.3
29.4
29.5
29.6
29.7
29.8
29.9
30.0
30.1
30.2
30.3
30.4
30.5
30.6
30.7
30.8
30.9
31.0
31.1
31.2
31.3
31.4
31.5
31.6
31.7
31.8
31.9
32.0
32.1
32.2
32.3
32.4
32.5
32.6
32.7
32.8
32.9
33.0
33.1
33.2
33.3
33.4
33.5
0
50
2
-2
-1
0
1
Color
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
0
10
20
30
40
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
1.1
1.2
1.3
1.4
1.5
1.6
1.7
1.8
1.9
2.0
2.1
2.2
2.3
2.4
2.5
2.6
2.7
2.8
2.9
3.0
3.1
3.2
3.3
3.4
3.5
3.6
3.7
3.8
3.9
4.0
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
5.0
5.1
5.2
5.3
5.4
5.5
5.6
5.7
5.8
5.9
6.0
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
7.0
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
8.0
8.1
8.2
8.3
8.4
8.5
8.6
8.7
8.8
8.9
9.0
9.1
9.2
9.3
9.4
9.5
9.6
9.7
9.8
9.9
10.0
10.1
10.2
10.3
10.4
10.5
10.6
10.7
10.8
10.9
11.0
11.1
11.2
11.3
11.4
11.5
11.6
11.7
11.8
11.9
12.0
12.1
12.2
12.3
12.4
12.5
12.6
12.7
12.8
12.9
13.0
13.1
13.2
13.3
13.4
13.5
13.6
13.7
13.8
13.9
14.0
14.1
14.2
14.3
14.4
14.5
14.6
14.7
14.8
14.9
15.0
15.1
15.2
15.3
15.4
15.5
15.6
15.7
15.8
15.9
16.0
16.1
16.2
16.3
16.4
16.5
16.6
16.7
16.8
16.9
17.0
17.1
17.2
17.3
17.4
17.5
17.6
17.7
17.8
17.9
18.0
18.1
18.2
18.3
18.4
18.5
18.6
18.7
18.8
18.9
19.0
19.1
19.2
19.3
19.4
19.5
19.6
19.7
19.8
19.9
20.0
20.1
20.2
20.3
20.4
20.5
20.6
20.7
20.8
20.9
21.0
21.1
21.2
21.3
21.4
21.5
21.6
21.7
21.8
21.9
22.0
22.1
22.2
22.3
22.4
22.5
22.6
22.7
22.8
22.9
23.0
23.1
23.2
23.3
23.4
23.5
23.6
23.7
23.8
23.9
24.0
24.1
24.2
24.3
24.4
24.5
24.6
24.7
24.8
24.9
25.0
25.1
25.2
25.3
25.4
25.5
25.6
25.7
25.8
25.9
26.0
26.1
26.2
26.3
26.4
26.5
26.6
26.7
26.8
26.9
27.0
27.1
27.2
27.3
27.4
27.5
27.6
27.7
27.8
27.9
28.0
28.1
28.2
28.3
28.4
28.5
28.6
28.7
28.8
28.9
29.0
29.1
29.2
29.3
29.4
29.5
29.6
29.7
29.8
29.9
30.0
30.1
30.2
30.3
30.4
30.5
30.6
30.7
30.8
30.9
31.0
31.1
31.2
31.3
31.4
31.5
31.6
31.7
31.8
31.9
32.0
32.1
32.2
32.3
32.4
32.5
32.6
32.7
32.8
32.9
33.0
33.1
33.2
33.3
33.4
33.5
0
50
y
x
0
2
4
6
8
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
0.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
0.50
0.55
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
2.05
2.10
2.15
2.20
2.25
2.30
2.35
2.40
2.45
2.50
2.55
2.60
2.65
2.70
2.75
2.80
2.85
2.90
2.95
3.00
3.05
3.10
3.15
3.20
3.25
3.30
3.35
3.40
3.45
3.50
3.55
3.60
3.65
3.70
3.75
3.80
3.85
3.90
3.95
4.00
4.05
4.10
4.15
4.20
4.25
4.30
4.35
4.40
4.45
4.50
4.55
4.60
4.65
4.70
4.75
4.80
4.85
4.90
4.95
5.00
5.05
5.10
5.15
5.20
5.25
5.30
5.35
5.40
5.45
5.50
5.55
5.60
5.65
5.70
5.75
5.80
5.85
5.90
5.95
6.00
6.05
6.10
6.15
6.20
6.25
6.30
6.35
6.40
6.45
6.50
6.55
6.60
6.65
6.70
6.75
6.80
6.85
6.90
6.95
7.00
7.05
7.10
7.15
7.20
7.25
7.30
7.35
7.40
7.45
7.50
7.55
7.60
7.65
7.70
7.75
7.80
7.85
7.90
7.95
8.00
0
10
2
-2
-1
0
1
f(x,y)
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
0
2
4
6
8
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
0.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
0.50
0.55
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
2.05
2.10
2.15
2.20
2.25
2.30
2.35
2.40
2.45
2.50
2.55
2.60
2.65
2.70
2.75
2.80
2.85
2.90
2.95
3.00
3.05
3.10
3.15
3.20
3.25
3.30
3.35
3.40
3.45
3.50
3.55
3.60
3.65
3.70
3.75
3.80
3.85
3.90
3.95
4.00
4.05
4.10
4.15
4.20
4.25
4.30
4.35
4.40
4.45
4.50
4.55
4.60
4.65
4.70
4.75
4.80
4.85
4.90
4.95
5.00
5.05
5.10
5.15
5.20
5.25
5.30
5.35
5.40
5.45
5.50
5.55
5.60
5.65
5.70
5.75
5.80
5.85
5.90
5.95
6.00
6.05
6.10
6.15
6.20
6.25
6.30
6.35
6.40
6.45
6.50
6.55
6.60
6.65
6.70
6.75
6.80
6.85
6.90
6.95
7.00
7.05
7.10
7.15
7.20
7.25
7.30
7.35
7.40
7.45
7.50
7.55
7.60
7.65
7.70
7.75
7.80
7.85
7.90
7.95
8.00
0
10
y
x
0
2
4
6
8
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
0.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
0.50
0.55
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
2.05
2.10
2.15
2.20
2.25
2.30
2.35
2.40
2.45
2.50
2.55
2.60
2.65
2.70
2.75
2.80
2.85
2.90
2.95
3.00
3.05
3.10
3.15
3.20
3.25
3.30
3.35
3.40
3.45
3.50
3.55
3.60
3.65
3.70
3.75
3.80
3.85
3.90
3.95
4.00
4.05
4.10
4.15
4.20
4.25
4.30
4.35
4.40
4.45
4.50
4.55
4.60
4.65
4.70
4.75
4.80
4.85
4.90
4.95
5.00
5.05
5.10
5.15
5.20
5.25
5.30
5.35
5.40
5.45
5.50
5.55
5.60
5.65
5.70
5.75
5.80
5.85
5.90
5.95
6.00
6.05
6.10
6.15
6.20
6.25
6.30
6.35
6.40
6.45
6.50
6.55
6.60
6.65
6.70
6.75
6.80
6.85
6.90
6.95
7.00
7.05
7.10
7.15
7.20
7.25
7.30
7.35
7.40
7.45
7.50
7.55
7.60
7.65
7.70
7.75
7.80
7.85
7.90
7.95
8.00
0
10
f1
f2
Color
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
-1.0
-0.5
0.0
0.5
1.0
-1.0
-0.9
-0.8
-0.7
-0.6
-0.5
-0.4
-0.3
-0.2
-0.1
0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1.0
-1.00
-0.99
-0.98
-0.97
-0.96
-0.95
-0.94
-0.93
-0.92
-0.91
-0.90
-0.89
-0.88
-0.87
-0.86
-0.85
-0.84
-0.83
-0.82
-0.81
-0.80
-0.79
-0.78
-0.77
-0.76
-0.75
-0.74
-0.73
-0.72
-0.71
-0.70
-0.69
-0.68
-0.67
-0.66
-0.65
-0.64
-0.63
-0.62
-0.61
-0.60
-0.59
-0.58
-0.57
-0.56
-0.55
-0.54
-0.53
-0.52
-0.51
-0.50
-0.49
-0.48
-0.47
-0.46
-0.45
-0.44
-0.43
-0.42
-0.41
-0.40
-0.39
-0.38
-0.37
-0.36
-0.35
-0.34
-0.33
-0.32
-0.31
-0.30
-0.29
-0.28
-0.27
-0.26
-0.25
-0.24
-0.23
-0.22
-0.21
-0.20
-0.19
-0.18
-0.17
-0.16
-0.15
-0.14
-0.13
-0.12
-0.11
-0.10
-0.09
-0.08
-0.07
-0.06
-0.05
-0.04
-0.03
-0.02
-0.01
0.00
0.01
0.02
0.03
0.04
0.05
0.06
0.07
0.08
0.09
0.10
0.11
0.12
0.13
0.14
0.15
0.16
0.17
0.18
0.19
0.20
0.21
0.22
0.23
0.24
0.25
0.26
0.27
0.28
0.29
0.30
0.31
0.32
0.33
0.34
0.35
0.36
0.37
0.38
0.39
0.40
0.41
0.42
0.43
0.44
0.45
0.46
0.47
0.48
0.49
0.50
0.51
0.52
0.53
0.54
0.55
0.56
0.57
0.58
0.59
0.60
0.61
0.62
0.63
0.64
0.65
0.66
0.67
0.68
0.69
0.70
0.71
0.72
0.73
0.74
0.75
0.76
0.77
0.78
0.79
0.80
0.81
0.82
0.83
0.84
0.85
0.86
0.87
0.88
0.89
0.90
0.91
0.92
0.93
0.94
0.95
0.96
0.97
0.98
0.99
1.00
-1
0
1
f(x)
Another feature is that a plot can be added to incrementally, using push!
.
p = plot()
push!(p, layer(x=[2,4], y=[2,4], size=[1.4142], color=[colorant"gold"]))
push!(p, Coord.cartesian(fixed=true))
push!(p, Guide.title("My Awesome Plot"))
x
0
1
2
3
4
5
6
0.00
0.25
0.50
0.75
1.00
1.25
1.50
1.75
2.00
2.25
2.50
2.75
3.00
3.25
3.50
3.75
4.00
4.25
4.50
4.75
5.00
5.25
5.50
5.75
6.00
0.00
0.02
0.04
0.06
0.08
0.10
0.12
0.14
0.16
0.18
0.20
0.22
0.24
0.26
0.28
0.30
0.32
0.34
0.36
0.38
0.40
0.42
0.44
0.46
0.48
0.50
0.52
0.54
0.56
0.58
0.60
0.62
0.64
0.66
0.68
0.70
0.72
0.74
0.76
0.78
0.80
0.82
0.84
0.86
0.88
0.90
0.92
0.94
0.96
0.98
1.00
1.02
1.04
1.06
1.08
1.10
1.12
1.14
1.16
1.18
1.20
1.22
1.24
1.26
1.28
1.30
1.32
1.34
1.36
1.38
1.40
1.42
1.44
1.46
1.48
1.50
1.52
1.54
1.56
1.58
1.60
1.62
1.64
1.66
1.68
1.70
1.72
1.74
1.76
1.78
1.80
1.82
1.84
1.86
1.88
1.90
1.92
1.94
1.96
1.98
2.00
2.02
2.04
2.06
2.08
2.10
2.12
2.14
2.16
2.18
2.20
2.22
2.24
2.26
2.28
2.30
2.32
2.34
2.36
2.38
2.40
2.42
2.44
2.46
2.48
2.50
2.52
2.54
2.56
2.58
2.60
2.62
2.64
2.66
2.68
2.70
2.72
2.74
2.76
2.78
2.80
2.82
2.84
2.86
2.88
2.90
2.92
2.94
2.96
2.98
3.00
3.02
3.04
3.06
3.08
3.10
3.12
3.14
3.16
3.18
3.20
3.22
3.24
3.26
3.28
3.30
3.32
3.34
3.36
3.38
3.40
3.42
3.44
3.46
3.48
3.50
3.52
3.54
3.56
3.58
3.60
3.62
3.64
3.66
3.68
3.70
3.72
3.74
3.76
3.78
3.80
3.82
3.84
3.86
3.88
3.90
3.92
3.94
3.96
3.98
4.00
4.02
4.04
4.06
4.08
4.10
4.12
4.14
4.16
4.18
4.20
4.22
4.24
4.26
4.28
4.30
4.32
4.34
4.36
4.38
4.40
4.42
4.44
4.46
4.48
4.50
4.52
4.54
4.56
4.58
4.60
4.62
4.64
4.66
4.68
4.70
4.72
4.74
4.76
4.78
4.80
4.82
4.84
4.86
4.88
4.90
4.92
4.94
4.96
4.98
5.00
5.02
5.04
5.06
5.08
5.10
5.12
5.14
5.16
5.18
5.20
5.22
5.24
5.26
5.28
5.30
5.32
5.34
5.36
5.38
5.40
5.42
5.44
5.46
5.48
5.50
5.52
5.54
5.56
5.58
5.60
5.62
5.64
5.66
5.68
5.70
5.72
5.74
5.76
5.78
5.80
5.82
5.84
5.86
5.88
5.90
5.92
5.94
5.96
5.98
6.00
0
10
4,4
2,2
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
0
1
2
3
4
5
6
0.00
0.25
0.50
0.75
1.00
1.25
1.50
1.75
2.00
2.25
2.50
2.75
3.00
3.25
3.50
3.75
4.00
4.25
4.50
4.75
5.00
5.25
5.50
5.75
6.00
0.00
0.02
0.04
0.06
0.08
0.10
0.12
0.14
0.16
0.18
0.20
0.22
0.24
0.26
0.28
0.30
0.32
0.34
0.36
0.38
0.40
0.42
0.44
0.46
0.48
0.50
0.52
0.54
0.56
0.58
0.60
0.62
0.64
0.66
0.68
0.70
0.72
0.74
0.76
0.78
0.80
0.82
0.84
0.86
0.88
0.90
0.92
0.94
0.96
0.98
1.00
1.02
1.04
1.06
1.08
1.10
1.12
1.14
1.16
1.18
1.20
1.22
1.24
1.26
1.28
1.30
1.32
1.34
1.36
1.38
1.40
1.42
1.44
1.46
1.48
1.50
1.52
1.54
1.56
1.58
1.60
1.62
1.64
1.66
1.68
1.70
1.72
1.74
1.76
1.78
1.80
1.82
1.84
1.86
1.88
1.90
1.92
1.94
1.96
1.98
2.00
2.02
2.04
2.06
2.08
2.10
2.12
2.14
2.16
2.18
2.20
2.22
2.24
2.26
2.28
2.30
2.32
2.34
2.36
2.38
2.40
2.42
2.44
2.46
2.48
2.50
2.52
2.54
2.56
2.58
2.60
2.62
2.64
2.66
2.68
2.70
2.72
2.74
2.76
2.78
2.80
2.82
2.84
2.86
2.88
2.90
2.92
2.94
2.96
2.98
3.00
3.02
3.04
3.06
3.08
3.10
3.12
3.14
3.16
3.18
3.20
3.22
3.24
3.26
3.28
3.30
3.32
3.34
3.36
3.38
3.40
3.42
3.44
3.46
3.48
3.50
3.52
3.54
3.56
3.58
3.60
3.62
3.64
3.66
3.68
3.70
3.72
3.74
3.76
3.78
3.80
3.82
3.84
3.86
3.88
3.90
3.92
3.94
3.96
3.98
4.00
4.02
4.04
4.06
4.08
4.10
4.12
4.14
4.16
4.18
4.20
4.22
4.24
4.26
4.28
4.30
4.32
4.34
4.36
4.38
4.40
4.42
4.44
4.46
4.48
4.50
4.52
4.54
4.56
4.58
4.60
4.62
4.64
4.66
4.68
4.70
4.72
4.74
4.76
4.78
4.80
4.82
4.84
4.86
4.88
4.90
4.92
4.94
4.96
4.98
5.00
5.02
5.04
5.06
5.08
5.10
5.12
5.14
5.16
5.18
5.20
5.22
5.24
5.26
5.28
5.30
5.32
5.34
5.36
5.38
5.40
5.42
5.44
5.46
5.48
5.50
5.52
5.54
5.56
5.58
5.60
5.62
5.64
5.66
5.68
5.70
5.72
5.74
5.76
5.78
5.80
5.82
5.84
5.86
5.88
5.90
5.92
5.94
5.96
5.98
6.00
0
10
y
My Awesome Plot
Gadfly is designed to plot data in so-called "long form", in which data that is of the same type, or measuring the same quantity, are stored in a single column, and any factors or groups are specified by additional columns. This is how data is typically stored in a database.
Sometimes data tables are organized by grouping values of the same type into multiple columns, with a column name used to distinguish the grouping. We refer to this as "wide form" data.
To illustrate the difference consider some historical London birth rate data.
births = RDatasets.dataset("HistData", "Arbuthnot")[:,[:Year, :Males, :Females]]
Row Year Males Females 1 1629 5218 4683 2 1630 4858 4457 3 1631 4422 4102 4 1632 4994 4590 5 1633 5158 4839 6 1634 5035 4820 ... ... ... ...
This table is wide form because "Males" and "Females" are two columns both measuring number of births. Wide form data can always be transformed to long form (e.g. with the stack
function in DataFrames) but this can be inconvenient, especially if the data is not already in a DataFrame.
stack(births, [:Males, :Females])
Row variable value Year 1 Males 5218 1629 2 Males 4858 1630 3 Males 4422 1631 ... ... ... ... 162 Females 7623 1708 163 Females 7380 1709 164 Females 7288 1710
The resulting table is long form with number of births in one column, here with the default name given by stack
: "value". Data in this form can be plotted very conveniently with Gadfly.
plot(stack(births, [:Males, :Females]), x=:Year, y=:value, color=:variable,
Geom.line)
Year
1625
1650
1675
1700
1725
1625
1630
1635
1640
1645
1650
1655
1660
1665
1670
1675
1680
1685
1690
1695
1700
1705
1710
1715
1720
1725
1625.0
1625.5
1626.0
1626.5
1627.0
1627.5
1628.0
1628.5
1629.0
1629.5
1630.0
1630.5
1631.0
1631.5
1632.0
1632.5
1633.0
1633.5
1634.0
1634.5
1635.0
1635.5
1636.0
1636.5
1637.0
1637.5
1638.0
1638.5
1639.0
1639.5
1640.0
1640.5
1641.0
1641.5
1642.0
1642.5
1643.0
1643.5
1644.0
1644.5
1645.0
1645.5
1646.0
1646.5
1647.0
1647.5
1648.0
1648.5
1649.0
1649.5
1650.0
1650.5
1651.0
1651.5
1652.0
1652.5
1653.0
1653.5
1654.0
1654.5
1655.0
1655.5
1656.0
1656.5
1657.0
1657.5
1658.0
1658.5
1659.0
1659.5
1660.0
1660.5
1661.0
1661.5
1662.0
1662.5
1663.0
1663.5
1664.0
1664.5
1665.0
1665.5
1666.0
1666.5
1667.0
1667.5
1668.0
1668.5
1669.0
1669.5
1670.0
1670.5
1671.0
1671.5
1672.0
1672.5
1673.0
1673.5
1674.0
1674.5
1675.0
1675.5
1676.0
1676.5
1677.0
1677.5
1678.0
1678.5
1679.0
1679.5
1680.0
1680.5
1681.0
1681.5
1682.0
1682.5
1683.0
1683.5
1684.0
1684.5
1685.0
1685.5
1686.0
1686.5
1687.0
1687.5
1688.0
1688.5
1689.0
1689.5
1690.0
1690.5
1691.0
1691.5
1692.0
1692.5
1693.0
1693.5
1694.0
1694.5
1695.0
1695.5
1696.0
1696.5
1697.0
1697.5
1698.0
1698.5
1699.0
1699.5
1700.0
1700.5
1701.0
1701.5
1702.0
1702.5
1703.0
1703.5
1704.0
1704.5
1705.0
1705.5
1706.0
1706.5
1707.0
1707.5
1708.0
1708.5
1709.0
1709.5
1710.0
1710.5
1711.0
1711.5
1712.0
1712.5
1713.0
1713.5
1714.0
1714.5
1715.0
1715.5
1716.0
1716.5
1717.0
1717.5
1718.0
1718.5
1719.0
1719.5
1720.0
1720.5
1721.0
1721.5
1722.0
1722.5
1723.0
1723.5
1724.0
1724.5
1725.0
1625
1650
1675
1700
1725
Males
Females
variable
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
0
5000
10000
0
500
1000
1500
2000
2500
3000
3500
4000
4500
5000
5500
6000
6500
7000
7500
8000
8500
9000
9500
10000
0
50
100
150
200
250
300
350
400
450
500
550
600
650
700
750
800
850
900
950
1000
1050
1100
1150
1200
1250
1300
1350
1400
1450
1500
1550
1600
1650
1700
1750
1800
1850
1900
1950
2000
2050
2100
2150
2200
2250
2300
2350
2400
2450
2500
2550
2600
2650
2700
2750
2800
2850
2900
2950
3000
3050
3100
3150
3200
3250
3300
3350
3400
3450
3500
3550
3600
3650
3700
3750
3800
3850
3900
3950
4000
4050
4100
4150
4200
4250
4300
4350
4400
4450
4500
4550
4600
4650
4700
4750
4800
4850
4900
4950
5000
5050
5100
5150
5200
5250
5300
5350
5400
5450
5500
5550
5600
5650
5700
5750
5800
5850
5900
5950
6000
6050
6100
6150
6200
6250
6300
6350
6400
6450
6500
6550
6600
6650
6700
6750
6800
6850
6900
6950
7000
7050
7100
7150
7200
7250
7300
7350
7400
7450
7500
7550
7600
7650
7700
7750
7800
7850
7900
7950
8000
8050
8100
8150
8200
8250
8300
8350
8400
8450
8500
8550
8600
8650
8700
8750
8800
8850
8900
8950
9000
9050
9100
9150
9200
9250
9300
9350
9400
9450
9500
9550
9600
9650
9700
9750
9800
9850
9900
9950
10000
0
10000
value
In some cases, explicitly transforming the data can be burdensome. Gadfly lets you avoid this by referring to columns or groups of columns in an implicit long-form version of the data.
plot(births, x=:Year, y=Col.value(:Males, :Females),
color=Col.index(:Males, :Females), Geom.line)
Here Col.value
produces the concatenated values from a set of columns, and Col.index
refers to a vector labeling each value in that concatenation by the column it came from. Also useful is Row.index
, which will give the row index of items in a concatenation.
This syntax also lets us more conveniently plot data that is not in a DataFrame, such as matrices or arrays of arrays. Below we recreate the plot above for a third time after first converting the DataFrame to an Array.
births_array = Matrix(births)
plot(births_array, x=Col.value(1), y=Col.value(2:3...),
color=Col.index(2:3...), Geom.line, Scale.color_discrete,
Guide.colorkey(labels=["Males","Females"]), Guide.xlabel("Year"))
When given no arguments Row.index
, Col.index
, and Col.value
assume all columns are being concatenated.
And here's an example that illustrates two more points:
Adding a variable (date1
) that isn't in the matrix X
Adding a discrete color scale that repeats (color_rep
) using Dates
palette = Scale.default_discrete_colors(11)
color_rep(nc::Int) = palette[mod1.(1:nc, length(palette))]
n = 14
X = exp.(-0.05*[1:50;]) * permutedims([1:n;])
date1 = collect(Date(2000):Month(1):Date(2004,2,1))
ci = Col.index(1:n...)
plot(X, x=repeat(date1, inner=n),
y=Col.value(1:n...), color=ci, linestyle=ci,
Geom.line, Scale.color_discrete(color_rep)
)
x
Jan 1, 2000
2001
2002
2003
2004
2005
Jan 1, 2000
Apr
Jul
Oct
Jan 2001
Apr
Jul
Oct
Jan 2002
Apr
Jul
Oct
Jan 2003
Apr
Jul
Oct
Jan 2004
Apr
Jul
Oct
Jan 2005
Dec 23, 2000
30
Jan 6, 2001
13
20
27
Feb 3
10
17
24
Mar 3
10
17
24
31
Apr 7
14
21
28
May 5
12
19
26
Jun 2
9
16
23
30
Jul 7
14
21
28
Aug 4
11
18
25
Sep 1
8
15
22
29
Oct 6
13
20
27
Nov 3
10
17
24
Dec 1
8
15
22
29
Jan 5, 2002
12
19
26
Feb 2
9
16
23
Mar 2
9
16
23
30
Apr 6
13
20
27
May 4
11
18
25
Jun 1
8
15
22
29
Jul 6
13
20
27
Aug 3
10
17
24
31
Sep 7
14
21
28
Oct 5
12
19
26
Nov 2
9
16
23
30
Dec 7
14
21
28
Jan 4, 2003
11
18
25
Feb 1
8
15
22
Mar 1
8
15
22
29
Apr 5
12
19
26
May 3
10
17
24
31
Jun 7
14
21
28
Jul 5
12
19
26
Aug 2
9
16
23
30
Sep 6
13
20
27
Oct 4
11
18
25
Nov 1
8
15
22
29
Dec 6
13
20
27
Jan 3, 2004
10
17
24
31
Feb 7
14
21
28
Mar 6
13
20
27
Apr 3
10
17
24
May 1
8
15
22
29
Jun 5
12
19
26
Jul 3
10
17
24
31
Aug 7
14
21
28
Sep 4
11
18
25
Oct 2
9
16
23
30
Nov 6
13
20
27
Dec 4
11
18
25
Jan 1, 2005
Jan 1, 2000
2005
12
13
14
4
5
6
7
8
9
10
11
Column
h,j,k,l,arrows,drag to pan
i,o,+,-,scroll,shift-drag to zoom
r,dbl-click to reset
c for coordinates
? for help
?
0
5
10
15
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
5.5
6.0
6.5
7.0
7.5
8.0
8.5
9.0
9.5
10.0
10.5
11.0
11.5
12.0
12.5
13.0
13.5
14.0
14.5
15.0
0.00
0.05
0.10
0.15
0.20
0.25
0.30
0.35
0.40
0.45
0.50
0.55
0.60
0.65
0.70
0.75
0.80
0.85
0.90
0.95
1.00
1.05
1.10
1.15
1.20
1.25
1.30
1.35
1.40
1.45
1.50
1.55
1.60
1.65
1.70
1.75
1.80
1.85
1.90
1.95
2.00
2.05
2.10
2.15
2.20
2.25
2.30
2.35
2.40
2.45
2.50
2.55
2.60
2.65
2.70
2.75
2.80
2.85
2.90
2.95
3.00
3.05
3.10
3.15
3.20
3.25
3.30
3.35
3.40
3.45
3.50
3.55
3.60
3.65
3.70
3.75
3.80
3.85
3.90
3.95
4.00
4.05
4.10
4.15
4.20
4.25
4.30
4.35
4.40
4.45
4.50
4.55
4.60
4.65
4.70
4.75
4.80
4.85
4.90
4.95
5.00
5.05
5.10
5.15
5.20
5.25
5.30
5.35
5.40
5.45
5.50
5.55
5.60
5.65
5.70
5.75
5.80
5.85
5.90
5.95
6.00
6.05
6.10
6.15
6.20
6.25
6.30
6.35
6.40
6.45
6.50
6.55
6.60
6.65
6.70
6.75
6.80
6.85
6.90
6.95
7.00
7.05
7.10
7.15
7.20
7.25
7.30
7.35
7.40
7.45
7.50
7.55
7.60
7.65
7.70
7.75
7.80
7.85
7.90
7.95
8.00
8.05
8.10
8.15
8.20
8.25
8.30
8.35
8.40
8.45
8.50
8.55
8.60
8.65
8.70
8.75
8.80
8.85
8.90
8.95
9.00
9.05
9.10
9.15
9.20
9.25
9.30
9.35
9.40
9.45
9.50
9.55
9.60
9.65
9.70
9.75
9.80
9.85
9.90
9.95
10.00
10.05
10.10
10.15
10.20
10.25
10.30
10.35
10.40
10.45
10.50
10.55
10.60
10.65
10.70
10.75
10.80
10.85
10.90
10.95
11.00
11.05
11.10
11.15
11.20
11.25
11.30
11.35
11.40
11.45
11.50
11.55
11.60
11.65
11.70
11.75
11.80
11.85
11.90
11.95
12.00
12.05
12.10
12.15
12.20
12.25
12.30
12.35
12.40
12.45
12.50
12.55
12.60
12.65
12.70
12.75
12.80
12.85
12.90
12.95
13.00
13.05
13.10
13.15
13.20
13.25
13.30
13.35
13.40
13.45
13.50
13.55
13.60
13.65
13.70
13.75
13.80
13.85
13.90
13.95
14.00
14.05
14.10
14.15
14.20
14.25
14.30
14.35
14.40
14.45
14.50
14.55
14.60
14.65
14.70
14.75
14.80
14.85
14.90
14.95
15.00
0
20
y
Lastly, plotting arrays of vectors works in much the same way as matrices, but constituent vectors may be of varying lengths.