Saya memiliki subplot dengan satu entri legenda. Saya menempatkan legenda di bagian bawah gambar dan menggunakan mode='expand'; namun, entri legenda tunggal ditempatkan di paling kiri kotak legenda. Untuk pemahaman saya, mengubah kwargs seperti bbox_to_anchor mengubah parameter kotak legenda tetapi bukan parameter simbol/teks di dalamnya. Di bawah ini adalah contoh untuk mereproduksi masalah saya.

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 21)
y = np.exp(x)
z = x **2

fig, axes = plt.subplots(nrows=1, ncols=2)
axes[0].plot(x, y, color='r', label='exponential')
axes[1].plot(x, z, color='b')
# handles, labels = axes[0].get_legend_handles_labels()
plt.subplots_adjust(bottom=0.125)
fig.legend(mode='expand', loc='lower center')
plt.show()
plt.close(fig)

Kode ini menghasilkan gambar ini python-3.x matplotlib legend subplot legend-properties

0
user10121139 15 Maret 2019, 14:17

1 menjawab

Jawaban Terbaik

Entri legenda ditempatkan menggunakan objek HPacker. Ini tidak memungkinkan untuk dipusatkan. Perilakunya adalah bahwa HPacker itu "dibenarkan" (mirip dengan opsi "membenarkan" dalam perangkat lunak pengolah kata yang umum).

Solusinya adalah membuat tiga (atau jumlah ganjil) entri legenda, sehingga entri yang diinginkan berada di tengah. Ini akan dicapai melalui argumen ncol dan penggunaan entri "dummy" (yang mungkin transparan dan tidak memiliki label terkait).

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-10, 10, 21)
y = np.exp(x)
z = x **2

fig, axes = plt.subplots(nrows=1, ncols=2)
fig.subplots_adjust(bottom=0.125)

l1, = axes[0].plot(x, y, color='r', label='exponential')
axes[1].plot(x, z, color='b')


dummy = plt.Line2D([],[], alpha=0)
fig.legend(handles=[dummy, l1, dummy],
           mode='expand', loc='lower center', ncol=3)
plt.show()

enter image description here

0
ImportanceOfBeingErnest 15 Maret 2019, 12:30