0

I am applying this strategy to place legend outside plot. The main difference here is that there are ax1 and ax2 twin axes.

The x value in bbox_to_anchor is set to 0.89 in the following MWE.

As can be seen, the legend box does not display the entire string labels for each color:

enter image description here

MWE:

import matplotlib.pyplot as plt
import numpy as np

suptitle_label = "rrrrrrrr @ ttttt yyyyyyy. uuuuuuuuuuuuuuuuuu\n$[$Xx$_{2}$Yy$_{7}]^{-}$ + $[$XxYy$_{2}$(cccc)$_{2}]^{+}$ JjYy model"

# Plotting 
fig, ax1 = plt.subplots()

ax1.set_xlabel('Time')
ax1.set_ylabel('y1label')

new_time = np.linspace(1, 8, 100)
j_data = [np.linspace(1, 4, 100), np.linspace(1, 5, 100), np.linspace(1, 6, 100), np.linspace(1, 7, 100)]

sorted_new_LABELS_fmt = ['$[$XxYy$_{2}$(cc)$_{2}]^{+}$', '$[$Xx$_{2}$Yy$_{7}]^{-}$', '$[$XxYy$_{4}]^{-}$', '$[$Xx$_{2}$Yy$_{5}$(cc)$_{2}]^{+}$']

sorted_new_LABELS_colors = ['green', 'red', 'blue', 'orange']

for j,k,c in zip(j_data, sorted_new_LABELS_fmt, sorted_new_LABELS_colors):
    ax1.plot(new_time, j, label='%s' % k, color='%s' %c)


All_e_chunks_n = np.linspace(-850, -860, 100)
ax2 = ax1.twinx()

ax2.set_ylabel('y2label')
ax2.plot(new_time, All_e_chunks_n, 'grey', alpha=0.6, linewidth=2.5, label='y2')

# Shrink cccrent axis 
box = ax1.get_position()
ax1.set_position([box.x0, box.y0, box.width * 0.9, box.height])

# Put the legend:
fig.legend(loc='center left', bbox_to_anchor=(0.89, 0.5)) 

fig.suptitle(suptitle_label, fontsize=15)                                                              

fig.savefig('mwe.pdf', bbox_inches='tight')

Decreasing this x value and commenting out thebbox_inches='tight' part, yields the following:

  • For bbox_to_anchor=(0.85, 0.5), this is the result:

enter image description here

  • For bbox_to_anchor=(0.80, 0.5), this is the result:

enter image description here

  • For bbox_to_anchor=(0.7, 0.5), this is the result: enter image description here
DavidC.
  • 669
  • 8
  • 26

0 Answers0