Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 506f26c

Browse files
committed
fix wrong tick direction at the boudary of floating axes
svn path=/trunk/matplotlib/; revision=8032
1 parent 3d6d64b commit 506f26c

2 files changed

Lines changed: 82 additions & 26 deletions

File tree

lib/mpl_toolkits/axes_grid/floating_axes.py

Lines changed: 45 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
from mpl_toolkits.axes_grid.axislines import AxisArtistHelper, GridHelperBase
1414
from mpl_toolkits.axes_grid.axis_artist import AxisArtist
15-
from matplotlib.transforms import Affine2D
15+
from matplotlib.transforms import Affine2D, IdentityTransform
1616
import numpy as np
1717

1818

@@ -85,7 +85,7 @@ def get_axislabel_pos_angle(self, axes):
8585

8686

8787
def get_tick_transform(self, axes):
88-
return axes.transData
88+
return IdentityTransform() #axes.transData
8989

9090
def get_tick_iterators(self, axes):
9191
"""tick_loc, tick_angle, tick_label, (optionally) tick_label"""
@@ -99,17 +99,17 @@ def get_tick_iterators(self, axes):
9999
lon_levs, lat_levs = np.asarray(lon_levs), np.asarray(lat_levs)
100100
if lat_factor is not None:
101101
yy0 = lat_levs / lat_factor
102-
dy = 0.01 / lat_factor
102+
dy = 0.001 / lat_factor
103103
else:
104104
yy0 = lat_levs
105-
dy = 0.01
105+
dy = 0.001
106106

107107
if lon_factor is not None:
108108
xx0 = lon_levs / lon_factor
109-
dx = 0.01 / lon_factor
109+
dx = 0.001 / lon_factor
110110
else:
111111
xx0 = lon_levs
112-
dx = 0.01
112+
dx = 0.001
113113

114114
_extremes = self.grid_helper._extremes
115115
xmin, xmax = sorted(_extremes[:2])
@@ -121,30 +121,60 @@ def get_tick_iterators(self, axes):
121121
mask = (xmin <= xx0) & (xx0 <= xmax)
122122
xx0 = xx0[mask]
123123

124+
def transform_xy(x, y):
125+
x1, y1 = grid_finder.transform_xy(x, y)
126+
x2y2 = axes.transData.transform(np.array([x1, y1]).transpose())
127+
x2, y2 = x2y2.transpose()
128+
return x2, y2
129+
124130
# find angles
125131
if self.nth_coord == 0:
126132
xx0 = np.empty_like(yy0)
127133
xx0.fill(self.value)
128-
xx1, yy1 = grid_finder.transform_xy(xx0, yy0)
129-
xx2, yy2 = grid_finder.transform_xy(xx0+dx, yy0)
130-
xx3, yy3 = grid_finder.transform_xy(xx0, yy0+dy)
134+
135+
#yy0_ = yy0.copy()
136+
137+
xx1, yy1 = transform_xy(xx0, yy0)
138+
139+
xx00 = xx0.copy()
140+
xx00[xx0+dx>xmax] -= dx
141+
xx1a, yy1a = transform_xy(xx00, yy0)
142+
xx1b, yy1b = transform_xy(xx00+dx, yy0)
143+
144+
yy00 = yy0.copy()
145+
yy00[yy0+dy>ymax] -= dy
146+
xx2a, yy2a = transform_xy(xx0, yy00)
147+
xx2b, yy2b = transform_xy(xx0, yy00+dy)
148+
131149
labels = self.grid_info["lat_labels"]
132150
labels = [l for l, m in zip(labels, mask) if m]
133151

134152
elif self.nth_coord == 1:
135153
yy0 = np.empty_like(xx0)
136154
yy0.fill(self.value)
137-
xx1, yy1 = grid_finder.transform_xy(xx0, yy0)
138-
xx2, yy2 = grid_finder.transform_xy(xx0, yy0+dy)
139-
xx3, yy3 = grid_finder.transform_xy(xx0+dx, yy0)
155+
156+
#xx0_ = xx0.copy()
157+
xx1, yy1 = transform_xy(xx0, yy0)
158+
159+
160+
yy00 = yy0.copy()
161+
yy00[yy0+dy>ymax] -= dy
162+
xx1a, yy1a = transform_xy(xx0, yy00)
163+
xx1b, yy1b = transform_xy(xx0, yy00+dy)
164+
165+
xx00 = xx0.copy()
166+
xx00[xx0+dx>xmax] -= dx
167+
xx2a, yy2a = transform_xy(xx00, yy0)
168+
xx2b, yy2b = transform_xy(xx00+dx, yy0)
169+
140170
labels = self.grid_info["lon_labels"]
141171
labels = [l for l, m in zip(labels, mask) if m]
142172

143173

144174
def f1():
145-
dd = np.arctan2(yy2-yy1, xx2-xx1) # angle normal
146-
dd2 = np.arctan2(yy3-yy1, xx3-xx1) # angle tangent
147-
mm = ((yy2-yy1)==0.) & ((xx2-xx1)==0.) # mask where dd1 is not defined
175+
dd = np.arctan2(yy1b-yy1a, xx1b-xx1a) # angle normal
176+
dd2 = np.arctan2(yy2b-yy2a, xx2b-xx2a) # angle tangent
177+
mm = ((yy1b-yy1a)==0.) & ((xx1b-xx1a)==0.) # mask where dd1 is not defined
148178
dd[mm] = dd2[mm]+3.14159/2.
149179

150180
#dd += 3.14159

lib/mpl_toolkits/axes_grid/grid_helper_curvelinear.py

Lines changed: 37 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from mpl_toolkits.axes_grid.axislines import \
99
AxisArtistHelper, GridHelperBase
1010
from mpl_toolkits.axes_grid.axis_artist import AxisArtist
11-
from matplotlib.transforms import Affine2D
11+
from matplotlib.transforms import Affine2D, IdentityTransform
1212
import numpy as np
1313

1414
class FixedAxisArtistHelper(AxisArtistHelper.Fixed):
@@ -172,7 +172,7 @@ def get_axislabel_pos_angle(self, axes):
172172

173173

174174
def get_tick_transform(self, axes):
175-
return axes.transData
175+
return IdentityTransform() #axes.transData
176176

177177
def get_tick_iterators(self, axes):
178178
"""tick_loc, tick_angle, tick_label, (optionally) tick_label"""
@@ -212,31 +212,57 @@ def get_tick_iterators(self, axes):
212212
#xx0, yy0 = xx0[mask], yy0[mask]
213213
xx0 = xx0[mask]
214214

215+
def transform_xy(x, y):
216+
x1, y1 = grid_finder.transform_xy(x, y)
217+
x2y2 = axes.transData.transform(np.array([x1, y1]).transpose())
218+
x2, y2 = x2y2.transpose()
219+
return x2, y2
220+
215221
# find angles
216222
if self.nth_coord == 0:
217223
xx0 = np.empty_like(yy0)
218224
xx0.fill(self.value)
219-
xx1, yy1 = grid_finder.transform_xy(xx0, yy0)
220-
xx2, yy2 = grid_finder.transform_xy(xx0+dx, yy0)
221-
xx3, yy3 = grid_finder.transform_xy(xx0, yy0+dy)
225+
226+
xx1, yy1 = transform_xy(xx0, yy0)
227+
228+
xx00 = xx0.copy()
229+
xx00[xx0+dx>e1] -= dx
230+
xx1a, yy1a = transform_xy(xx00, yy0)
231+
xx1b, yy1b = transform_xy(xx00+dx, yy0)
232+
233+
xx2a, yy2a = transform_xy(xx0, yy0)
234+
xx2b, yy2b = transform_xy(xx0, yy0+dy)
235+
222236
labels = self.grid_info["lat_labels"]
223237
labels = [l for l, m in zip(labels, mask) if m]
224238

225239
elif self.nth_coord == 1:
226240
yy0 = np.empty_like(xx0)
227241
yy0.fill(self.value)
228-
xx1, yy1 = grid_finder.transform_xy(xx0, yy0)
229-
xx2, yy2 = grid_finder.transform_xy(xx0, yy0+dy)
230-
xx3, yy3 = grid_finder.transform_xy(xx0+dx, yy0)
242+
243+
xx1, yy1 = transform_xy(xx0, yy0)
244+
245+
xx1a, yy1a = transform_xy(xx0, yy0)
246+
xx1b, yy1b = transform_xy(xx0, yy0+dy)
247+
248+
xx00 = xx0.copy()
249+
xx00[xx0+dx>e1] -= dx
250+
xx2a, yy2a = transform_xy(xx00, yy0)
251+
xx2b, yy2b = transform_xy(xx00+dx, yy0)
252+
231253
labels = self.grid_info["lon_labels"]
232254
labels = [l for l, m in zip(labels, mask) if m]
233255

234256

235257
def f1():
236-
dd = np.arctan2(yy2-yy1, xx2-xx1) # angle normal
237-
dd2 = np.arctan2(yy3-yy1, xx3-xx1) # angle tangent
238-
mm = ((yy2-yy1)==0.) & ((xx2-xx1)==0.) # mask where dd1 is not defined
258+
dd = np.arctan2(yy1b-yy1a, xx1b-xx1a) # angle normal
259+
dd2 = np.arctan2(yy2b-yy2a, xx2b-xx2a) # angle tangent
260+
mm = ((yy1b-yy1a)==0.) & ((xx1b-xx1a)==0.) # mask where dd1 is not defined
239261
dd[mm] = dd2[mm]+3.14159/2.
262+
#dd = np.arctan2(yy2-yy1, xx2-xx1) # angle normal
263+
#dd2 = np.arctan2(yy3-yy1, xx3-xx1) # angle tangent
264+
#mm = ((yy2-yy1)==0.) & ((xx2-xx1)==0.) # mask where dd1 is not defined
265+
#dd[mm] = dd2[mm]+3.14159/2.
240266

241267
#dd += 3.14159
242268

0 commit comments

Comments
 (0)