Skip to content

Commit 6297e57

Browse files
author
Greg
committed
fixed buts w/ facet_wrap
1 parent d4ceced commit 6297e57

File tree

5 files changed

+39
-24
lines changed

5 files changed

+39
-24
lines changed

ggplot/geoms/facet_grid.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,11 @@ def __radd__(self, gg):
4949

5050
combos = []
5151
for x_i in sorted(x.unique()):
52-
for y_i in sorted(y.unique()):
53-
combos.append((x_i, y_i))
52+
if y is not None:
53+
for y_i in sorted(y.unique()):
54+
combos.append((x_i, y_i))
55+
else:
56+
combos.append((x_i, 1))
5457
gg.facet_pairs = combos
5558

5659
return deepcopy(gg)

ggplot/geoms/facet_wrap.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,21 @@
22
import math
33

44
class facet_wrap(object):
5-
def __init__(self, x=None, ncol=None, nrow=None, scales="free"):
5+
def __init__(self, x=None, y=None, ncol=None, nrow=None, scales="free"):
66
self.x = x
7+
self.y = y
78
self.ncol = ncol
89
self.nrow = nrow
910
self.scales = scales
1011

1112
def __radd__(self, gg):
1213

1314
x = gg.data.get(self.x)
14-
if x is None:
15-
n_wide = 1
16-
else:
17-
n_wide = x.nunique()
15+
y = gg.data.get(self.y)
16+
if x is not None:
1817
gg.n_dim_x = x.nunique()
18+
if y is not None:
19+
gg.n_dim_x *= y.nunique()
1920

2021
n_wide = self.ncol
2122
n_high = self.nrow
@@ -34,6 +35,8 @@ def __radd__(self, gg):
3435
gg.n_wide, gg.n_high = int(n_wide), int(n_high)
3536
facets = []
3637
facets.append(self.x)
38+
if self.y:
39+
facets.append(self.y)
3740
gg.facets = facets
3841
gg.facet_type = "wrap"
3942
gg.facet_scales = self.scales

ggplot/ggplot.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,6 @@ def __init__(self, aesthetics, data):
115115
self.colormap = plt.cm.Blues
116116

117117
def __repr__(self):
118-
# TODO: Currently plotting the wrong number of facets.
119118
if self.facet_type=="grid":
120119
fig, axs = plt.subplots(self.n_high, self.n_wide,
121120
sharex=True, sharey=True)
@@ -128,13 +127,10 @@ def __repr__(self):
128127
for extra_plot in axs.flatten()[-extra_subplots:]:
129128
extra_plot.axis('off')
130129

131-
# TODO: This isn't working
132-
plots = [None for i in range(self.n_dim_x)]
133-
for i in range(self.n_dim_x):
134-
idx = (i % self.n_high) * self.n_wide + (i % self.n_wide)
135-
plots[idx] = (i % self.n_wide, i % self.n_high)
136-
137-
plots = [plot for plot in plots if plot is not None]
130+
plots = []
131+
for x in range(self.n_wide):
132+
for y in range(self.n_high):
133+
plots.append((x, y))
138134
plots = sorted(plots, key=lambda x: x[1] + x[0] * self.n_high + 1)
139135

140136
else:
@@ -146,7 +142,7 @@ def __repr__(self):
146142
# dimensions of the plot remain the same
147143
if self.facets:
148144
cntr = 0
149-
if len(self.facets)==2:
145+
if len(self.facets)==2 and self.facet_type!="wrap":
150146
# store the extreme x and y coordinates of each pair of axes
151147
axis_extremes = np.zeros(shape=(self.n_high * self.n_wide, 4))
152148
xlab_offset = .15
@@ -183,10 +179,11 @@ def __repr__(self):
183179
)
184180
plt.subplot(self.n_wide, self.n_high, pos)
185181

186-
# Handle the different scale types here (free|free_y|free_x|None) and
187-
# also make sure that only the left column gets y scales and the bottom
188-
# row gets x scales
189-
scale_facet(self.n_wide, self.n_high, self.facet_pairs, self.facet_scales)
182+
# Handle the different scale types here
183+
# (free|free_y|free_x|None) and also make sure that only the
184+
# left column gets y scales and the bottom row gets x scales
185+
scale_facet_grid(self.n_wide, self.n_high,
186+
self.facet_pairs, self.facet_scales)
190187

191188
else:
192189
for facet, frame in self.data.groupby(self.facets):
@@ -213,9 +210,13 @@ def __repr__(self):
213210
for callback in callbacks:
214211
fn = getattr(axs[cntr], callback['function'])
215212
fn(*callback['args'])
216-
#TODO: selective titles
217-
plt.title(facet)
213+
title = facet
214+
if isinstance(facet, tuple):
215+
title = ", ".join(facet)
216+
plt.table(cellText=[[title]], loc='top',
217+
cellLoc='center', cellColours=[['lightgrey']])
218218
cntr += 1
219+
scale_facet_wrap(self.n_wide, self.n_high, [], self.facet_scales)
219220
else:
220221
for layer in self._get_layers(self.data):
221222
for geom in self.geoms:

ggplot/scales/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from .scale_colour_gradient import scale_colour_gradient
22
from .scale_colour_gradient import scale_colour_gradient as scale_color_gradient
33
from .scale_colour_gradient import scale_colour_gradient as scale_colour_gradient2
4-
from .scale_facet import scale_facet
4+
from .scale_facet import scale_facet_grid
5+
from .scale_facet import scale_facet_wrap
56
from .scale_x_continuous import scale_x_continuous
67
from .scale_x_date import scale_x_date
78
from .scale_y_continuous import scale_y_continuous

ggplot/scales/scale_facet.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,15 @@
44
import numpy as np
55
import matplotlib.pyplot as plt
66
from .utils import calc_axis_breaks
7+
import sys
78

8-
def scale_facet(xdim, ydim, facet_pairs, scaletype):
9+
10+
def scale_facet_wrap(xdim, ydim, positions, scaletype):
11+
if scaletype is not None:
12+
sys.stderr.write("facet_wrap scales not yet implemented!\n")
13+
14+
15+
def scale_facet_grid(xdim, ydim, facet_pairs, scaletype):
916
# everyone gets the same scales
1017
if scaletype is None:
1118
min_x, max_x = 999999999, -999999999

0 commit comments

Comments
 (0)