Bagaimana saya bisa membuat legenda yang sama muncul di 2 subplot dan membuatnya diperluas di 2. Adakah yang tahu, jika saya harus menentukan label y untuk setiap subplot secara terpisah jika itu sama (Plot untuk makalah ilmiah) ? Saya tahu bahwa pertanyaan terakhir tidak ada hubungannya dengan komputasi, tetapi jika ada yang tahu jawabannya, saya akan menghargainya.

Untuk penempatan legenda saya menggunakan:

        ax[0].legend(bbox_to_anchor=(0., 1.02, 1., .102), loc=3,
               ncol= 4, mode="expand", borderaxespad=0)

plots

4
Tassou 9 Agustus 2017, 20:27

2 jawaban

Jawaban Terbaik

Untuk membuat legenda membentang di kedua subplot, Anda perlu menyesuaikan koordinat yang diberikan ke bbox_to_anchor. Menggunakan 2.2 untuk lebar (argumen ketiga) mencakup 2x lebar plot ditambah spasi di antara subplot. (Jika Anda memiliki spasi yang berbeda dari default, seperti f.tightlayout(), nilai ini perlu disesuaikan.)

Berikut adalah contoh kerja sederhana:

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0.0, 2.0)
x2 = np.linspace(0.0, 2.0)

y1 = np.cos(2 * np.pi * x1) * np.exp(-x1)
y2 = np.cos(2 * np.pi * x2)

f,ax = plt.subplots(1, 2)

ax[0].plot(x1, y1, 'ko-', label='Damped')
ax[0].plot(x2, y2, 'r.-', label='Undamped')
ax[1].plot(x1, y1, 'ko-', label='Damped')
ax[1].plot(x2, y2, 'r.-', label='Undamped')

ax[0].legend(bbox_to_anchor=(0., 1.02, 2.2, .102), loc=3,
               ncol=4, mode="expand", borderaxespad=0)

plt.show()

Hasilnya adalah plot ini:

enter image description here

4
user812786 9 Agustus 2017, 19:51

Untuk meregangkan legenda di semua subplot dalam gambar, Anda dapat mengotomatiskan penempatan legenda. Menggunakan subplotpars dari gambar memungkinkan untuk menemukan spasi yang digunakan, sehingga spasi tersebut dapat langsung digunakan dalam argumen bbox_to_anchor. Ini mengharuskan transformasi legenda disetel ke transformasi gambar melalui argumen bbox_transform. Satu-satunya parameter yang perlu Anda tentukan secara manual adalah jarak antara sumbu dan legenda (0,02 dalam contoh di bawah) dan tinggi legenda (0,05 dalam contoh di bawah), keduanya dalam satuan tinggi gambar.

s = fig.subplotpars
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ]
leg = axes[0].legend(..., bbox_to_anchor=bb, mode="expand", borderaxespad=0,
                     bbox_transform=fig.transFigure)

Contoh lengkap:

import matplotlib.pyplot as plt
import numpy as np

a = np.cumsum(np.random.rand(10,8), axis=0)

fig, axes = plt.subplots(ncols=2)

for i in range(a.shape[1]):
    axes[i//4].plot(a[:,i], marker="s", label="Label {}".format(i))

s = fig.subplotpars
bb=[s.left, s.top+0.02, s.right-s.left, 0.05 ]
leg = axes[0].legend(loc=8, bbox_to_anchor=bb, ncol= 4, mode="expand", borderaxespad=0,
                bbox_transform=fig.transFigure, fancybox=False, edgecolor="k")
leg.get_frame().set_linewidth(72./fig.dpi)
plt.show()

enter image description here

Mengenai apakah Anda membutuhkan satu atau dua legenda dalam sebuah karya ilmiah, ini sepenuhnya tergantung pada gaya makalah tersebut. Saya kira menggunakan satu legenda seperti di sini baik-baik saja. Namun kebanyakan jurnal mengharuskan Anda untuk menandai setiap subplot dengan huruf kecil, seperti a dan b atau (a) dan (b).

2
ImportanceOfBeingErnest 9 Agustus 2017, 21:49