@@ -1238,6 +1238,23 @@ def setGraphYLimits(self, ymin, ymax, axis):
1238
1238
1239
1239
# Graph axes
1240
1240
1241
+ def __initXAxisFormatterAndLocator (self ):
1242
+ if self .ax .xaxis .get_scale () != "linear" :
1243
+ return # Do not override formatter and locator
1244
+
1245
+ if not self .isXAxisTimeSeries ():
1246
+ self .ax .xaxis .set_major_formatter (DefaultTickFormatter ())
1247
+ return
1248
+
1249
+ # We can't use a matplotlib.dates.DateFormatter because it expects
1250
+ # the data to be in datetimes. Silx works internally with
1251
+ # timestamps (floats).
1252
+ locator = NiceDateLocator (tz = self .getXAxisTimeZone ())
1253
+ self .ax .xaxis .set_major_locator (locator )
1254
+ self .ax .xaxis .set_major_formatter (
1255
+ NiceAutoDateFormatter (locator , tz = self .getXAxisTimeZone ())
1256
+ )
1257
+
1241
1258
def setXAxisTimeZone (self , tz ):
1242
1259
super (BackendMatplotlib , self ).setXAxisTimeZone (tz )
1243
1260
@@ -1249,17 +1266,7 @@ def isXAxisTimeSeries(self):
1249
1266
1250
1267
def setXAxisTimeSeries (self , isTimeSeries ):
1251
1268
self ._isXAxisTimeSeries = isTimeSeries
1252
- if self ._isXAxisTimeSeries :
1253
- # We can't use a matplotlib.dates.DateFormatter because it expects
1254
- # the data to be in datetimes. Silx works internally with
1255
- # timestamps (floats).
1256
- locator = NiceDateLocator (tz = self .getXAxisTimeZone ())
1257
- self .ax .xaxis .set_major_locator (locator )
1258
- self .ax .xaxis .set_major_formatter (
1259
- NiceAutoDateFormatter (locator , tz = self .getXAxisTimeZone ())
1260
- )
1261
- else :
1262
- self .ax .xaxis .set_major_formatter (DefaultTickFormatter ())
1269
+ self .__initXAxisFormatterAndLocator ()
1263
1270
1264
1271
def setXAxisLogarithmic (self , flag ):
1265
1272
# Workaround for matplotlib 2.1.0 when one tries to set an axis
@@ -1271,8 +1278,10 @@ def setXAxisLogarithmic(self, flag):
1271
1278
self .ax .set_xlim (1 , 10 )
1272
1279
self .draw ()
1273
1280
1274
- self .ax2 .set_xscale ("log" if flag else "linear" )
1275
- self .ax .set_xscale ("log" if flag else "linear" )
1281
+ xscale = "log" if flag else "linear"
1282
+ self .ax2 .set_xscale (xscale )
1283
+ self .ax .set_xscale (xscale )
1284
+ self .__initXAxisFormatterAndLocator ()
1276
1285
1277
1286
def setYAxisLogarithmic (self , flag ):
1278
1287
# Workaround for matplotlib 2.0 issue with negative bounds
@@ -1290,8 +1299,15 @@ def setYAxisLogarithmic(self, flag):
1290
1299
if redraw :
1291
1300
self .draw ()
1292
1301
1293
- self .ax2 .set_yscale ("log" if flag else "linear" )
1294
- self .ax .set_yscale ("log" if flag else "linear" )
1302
+ if flag :
1303
+ self .ax2 .set_yscale ("log" )
1304
+ self .ax .set_yscale ("log" )
1305
+ return
1306
+
1307
+ self .ax2 .set_yscale ("linear" )
1308
+ self .ax2 .yaxis .set_major_formatter (DefaultTickFormatter ())
1309
+ self .ax .set_yscale ("linear" )
1310
+ self .ax .yaxis .set_major_formatter (DefaultTickFormatter ())
1295
1311
1296
1312
def setYAxisInverted (self , flag ):
1297
1313
if self .ax .yaxis_inverted () != bool (flag ):
0 commit comments