diff -pruN 0.45-1/Changes 0.46-1/Changes
--- 0.45-1/Changes	2025-04-04 18:30:30.000000000 +0000
+++ 0.46-1/Changes	2025-12-03 07:31:49.000000000 +0000
@@ -1,3 +1,10 @@
+gnuplotlib (0.46) unstable; urgency=medium
+
+  * 'axes' and 'y2' options can broadcast again
+  * I draw x2 tics if anything uses the x2 axis
+
+ -- Dima Kogan <dkogan@debian.org>  Tue, 02 Dec 2025 23:31:27 -0800
+
 gnuplotlib (0.45)
 
   * Uninteresting bug fix introduced in 0.44
diff -pruN 0.45-1/debian/changelog 0.46-1/debian/changelog
--- 0.45-1/debian/changelog	2025-04-04 18:32:38.000000000 +0000
+++ 0.46-1/debian/changelog	2025-12-03 07:33:25.000000000 +0000
@@ -1,3 +1,11 @@
+python-gnuplotlib (0.46-1) unstable; urgency=medium
+
+  * New upstream version 0.46
+    - 'axes' and 'y2' options can broadcast again
+    - I draw x2 tics if anything uses the x2 axis
+
+ -- Dima Kogan <dkogan@debian.org>  Tue, 02 Dec 2025 23:33:25 -0800
+
 python-gnuplotlib (0.45-1) unstable; urgency=medium
 
   * New upstream release
diff -pruN 0.45-1/gnuplotlib.py 0.46-1/gnuplotlib.py
--- 0.45-1/gnuplotlib.py	2025-04-04 18:30:30.000000000 +0000
+++ 0.46-1/gnuplotlib.py	2025-12-03 07:31:49.000000000 +0000
@@ -1126,7 +1126,7 @@ import numpysane as nps
 gnuplot_executable='gnuplot'
 
 # setup.py assumes the version is a simple string in '' quotes
-__version__ = '0.45'
+__version__ = '0.46'
 
 # In a multiplot, the "process" options apply to the larger plot containing all
 # the subplots, and the "subplot" options apply to each invididual plot.
@@ -2056,13 +2056,12 @@ labels with spaces in them
 
         basecmd = ''
 
-        # if anything is to be plotted on the y2 axis, set it up
-        if subplotOptions.get('3d') and \
-           any( 'axes' in curve for curve in curves ):
-            raise GnuplotlibError("3d plots cannot have 'axes' specified")
-        if any( curve.get('axes','x')[-1] == '2' for curve in curves ):
+        if any( curve.get('axes','xxx')[-2:] == 'y2' for curve in curves ):
             basecmd += "set ytics nomirror\n"
             basecmd += "set y2tics\n"
+        if any( curve.get('axes','xxx')[:2] == 'x2' for curve in curves ):
+            basecmd += "set xtics nomirror\n"
+            basecmd += "set x2tics\n"
 
         binwidth = None
         for curve in curves:
@@ -2242,16 +2241,9 @@ labels with spaces in them
                 if not opt in knownCurveOptions:
                     raise GnuplotlibError("'{}' not a known curve option".format(opt))
 
-            axes = curve.get('axes')
-            if axes is not None:
-                if not axes in knownAxes:
-                    raise GnuplotlibError(f'"axes" must be one of {knownAxes}, but got {axes=}')
-            if curve.get('y2'):
-                if axes is not None:
-                    raise GnuplotlibError('"y2" and "axes" are mutually exclusive')
-                del curve['y2']
-                curve['axes'] = 'x1y2'
-
+            if curve.get('y2') is not None and \
+               curve.get('axes') is not None:
+                raise GnuplotlibError('"y2" and "axes" are mutually exclusive')
 
             # tuplesize is either given explicitly, or taken from the '3d' plot
             # option. 2d plots default to tuplesize=2 and 3d plots to
@@ -2381,6 +2373,19 @@ labels with spaces in them
 
         curves = curves_flattened
 
+        # if anything is to be plotted on the y2 axis, set it up
+        for curve in curves:
+            axes = curve.get('axes')
+            if axes is not None:
+                if not axes in knownAxes:
+                    raise GnuplotlibError(f'"axes" must be one of {knownAxes}, but got {axes=}')
+            if curve.get('y2'):
+                del curve['y2']
+                curve['axes'] = 'x1y2'
+
+            if subplotOptions.get('3d') and axes is not None:
+                raise GnuplotlibError("3d plots cannot have 'axes' specified")
+
         return curves
 
 
diff -pruN 0.45-1/test.py 0.46-1/test.py
--- 0.45-1/test.py	2025-04-04 18:30:30.000000000 +0000
+++ 0.46-1/test.py	2025-12-03 07:31:49.000000000 +0000
@@ -82,6 +82,17 @@ gp.plot( x, nps.cat(x**3, x**2) , wait=1
 gp.plot( nps.cat(-x**3, x**2), _with='lines' , wait=1)
 gp.plot( (nps.cat(x**3, -x**2), dict(_with = 'points') ), wait=1)
 
+gp.plot( (nps.cat(x**3, -x**2),
+          dict(_with = 'points') ),
+         y2 = np.array((0,1)),
+         title = 'Broadcasting on y2',
+         wait=1)
+gp.plot( (nps.cat(x**3, -x**2),
+          dict(_with = 'points') ),
+         axes = np.array(('x1y1','x2y2')),
+         title = 'Broadcasting on axes',
+         wait=1)
+
 # Make sure xrange settings don't get overridden. The label below should be out
 # of bounds, and not visible
 gp.plot( ( np.arange(10), ),
