@@ -442,6 +442,16 @@ def test_plot_compare_evokeds(evoked):
442442 # test defaults
443443 figs = plot_compare_evokeds (evoked )
444444 assert len (figs ) == 3
445+ # test arbitrary ordering of channels is handled correctly, in topo mode
446+ evoked_subset = evoked .copy ().pick (["MEG 0113" , "MEG 0112" ])
447+ fig_ordered = plot_compare_evokeds (evoked_subset , axes = "topo" )
448+ evoked_reordered = evoked_subset .copy ()
449+ evoked_reordered .reorder_channels (["MEG 0112" , "MEG 0113" ])
450+ figs_reordered = plot_compare_evokeds (evoked_reordered , axes = "topo" )
451+ assert_allclose (
452+ fig_ordered [0 ].axes [0 ].lines [0 ].get_ydata (),
453+ figs_reordered [0 ].axes [0 ].lines [0 ].get_ydata (),
454+ )
445455 # test passing more than one evoked
446456 red , blue = evoked .copy (), evoked .copy ()
447457 red .comment = red .comment + "*" * 100
@@ -463,6 +473,19 @@ def test_plot_compare_evokeds(evoked):
463473 yvals = line .get_ydata ()
464474 assert (yvals < ylim [1 ]).all ()
465475 assert (yvals > ylim [0 ]).all ()
476+ # test that the channels are aligned when many evoked
477+ # are passed in different orders, in topo mode
478+ evoked_subset = evoked .copy ().pick (["MEG 0113" , "MEG 0112" ])
479+ evoked_reordered = evoked_subset .copy ()
480+ evoked_reordered .reorder_channels (["MEG 0112" , "MEG 0113" ])
481+ # catch warnings when testing misalignment on purpose
482+ with pytest .warns (RuntimeWarning , match = "Order of channels differs" ):
483+ figs = plot_compare_evokeds (
484+ dict (orig = evoked_subset , reordered = evoked_reordered ), axes = "topo"
485+ )
486+ assert_allclose (
487+ figs [0 ].axes [0 ].lines [0 ].get_ydata (), figs [0 ].axes [0 ].lines [1 ].get_ydata ()
488+ )
466489 # test plotting eyetracking data
467490 plt .close ("all" ) # close the previous figures as to avoid a too many figs warning
468491 info_tmp = mne .create_info (["pupil_left" ], evoked .info ["sfreq" ], ["pupil" ])
0 commit comments