Saya punya plot dengan dua sumbu y, menggunakan twinx()
. Saya juga memberi label pada garis, dan ingin menunjukkannya legend()
, tetapi saya hanya berhasil mendapatkan label satu sumbu dalam legenda:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import rc
rc('mathtext', default='regular')
fig = plt.figure()
ax = fig.add_subplot(111)
ax.plot(time, Swdown, '-', label = 'Swdown')
ax.plot(time, Rn, '-', label = 'Rn')
ax2 = ax.twinx()
ax2.plot(time, temp, '-r', label = 'temp')
ax.legend(loc=0)
ax.grid()
ax.set_xlabel("Time (h)")
ax.set_ylabel(r"Radiation ($MJ\,m^{-2}\,d^{-1}$)")
ax2.set_ylabel(r"Temperature ($^\circ$C)")
ax2.set_ylim(0, 35)
ax.set_ylim(-20,100)
plt.show()
Jadi saya hanya mendapatkan label sumbu pertama dalam legenda, dan bukan label 'temp' dari sumbu kedua. Bagaimana saya bisa menambahkan label ketiga ini ke legenda?
python
matplotlib
axis
legend
Joris
sumber
sumber
ax
dengan gaya yang saya gunakan diax2
: in kasus Andaax.plot([], [], '-r', label = 'temp')
,. Jauh lebih cepat dan sederhana daripada melakukannya dengan benar ...Jawaban:
Anda dapat dengan mudah menambahkan legenda kedua dengan menambahkan baris:
Anda akan mendapatkan ini:
Tetapi jika Anda ingin semua label pada satu legenda maka Anda harus melakukan sesuatu seperti ini:
Yang akan memberi Anda ini:
sumber
errorbar
plot. Untuk solusi yang menangani mereka dengan benar, lihat di bawah: stackoverflow.com/a/10129461/1319447ax1
. Dalam hal ini gunakanlns1=ax1.lines
dan kemudian tambahkanlns2
ke daftar ini.loc
dijelaskan di siniSaya tidak yakin apakah fungsi ini baru, tetapi Anda juga dapat menggunakan metode get_legend_handles_labels () daripada melacak sendiri baris dan label:
sumber
errorbar
plot, sedangkan yang diterima gagal (menunjukkan garis dan errorbars secara terpisah, dan tidak ada yang memiliki label yang tepat). Plus, lebih sederhana.ax2
dan tidak memiliki satu set sejak awalDari matplotlib versi 2.1 dan seterusnya, Anda dapat menggunakan legenda gambar . Alih-alih
ax.legend()
, yang menghasilkan legenda dengan gagang dari kapakax
, orang dapat membuat tokoh legendayang akan mengumpulkan semua pegangan dari semua subplot pada gambar. Karena itu adalah legenda tokoh, itu akan ditempatkan di sudut gambar, dan
loc
argumen itu relatif terhadap sosok itu.Untuk menempatkan legenda kembali ke kapak, orang akan memasok a
bbox_to_anchor
dan abbox_transform
. Yang terakhir akan menjadi transformasi sumbu dari sumbu yang harus ditinggali legenda. Yang pertama mungkin adalah koordinat tepi yang ditentukan denganloc
diberikan dalam koordinat sumbu.sumber
conda upgrade matplotlib
tidak menemukan versi yang lebih baru, saya masih menggunakan v.2.0.2Anda dapat dengan mudah mendapatkan apa yang Anda inginkan dengan menambahkan baris dalam kapak:
atau
Ini tidak akan merencanakan apa pun selain menambahkan label ke legenda kapak.
Saya pikir ini adalah cara yang jauh lebih mudah. Tidak perlu melacak garis secara otomatis ketika Anda hanya memiliki beberapa garis di sumbu kedua, karena memperbaiki dengan tangan seperti di atas akan sangat mudah. Bagaimanapun, itu tergantung pada apa yang Anda butuhkan.
Seluruh kode adalah sebagai berikut:
Plotnya seperti di bawah ini:
Perbarui: tambahkan versi yang lebih baik:
Ini tidak akan melakukan apa-apa sementara
plot(0, 0)
dapat mengubah kisaran sumbu.Satu contoh tambahan untuk pencar
sumber
Retas cepat yang mungkin sesuai dengan kebutuhan Anda ..
Lepaskan bingkai kotak dan posisikan secara manual kedua legenda di samping satu sama lain. Sesuatu seperti ini..
Di mana loc locup adalah persentase dari kiri ke kanan dan dari bawah ke atas yang mewakili lokasi dalam bagan.
sumber
Saya menemukan contoh resmi matplotlib berikut yang menggunakan host_subplot untuk menampilkan banyak sumbu y dan semua label berbeda dalam satu legenda. Tidak ada solusi yang diperlukan. Solusi terbaik yang saya temukan sejauh ini. http://matplotlib.org/examples/axes_grid/demo_parasite_axes2.html
sumber