Saya mencoba membuat gambar dengan 4 subplot windrose, Tapi saya menyadari bahwa windrose hanya memiliki sumbu seperti ini:ax = WindroseAxes.from_ax() Jadi, bagaimana saya bisa menggambar subplot dengan windrose?

5
Owen 11 Maret 2017, 11:44

2 jawaban

Jawaban Terbaik

Ada dua solusi:

(a) membuat sumbu dari persegi panjang

Pertama-tama sudah ada pertanyaan serupa di sini: Cara menambahkan sumbu tertentu ke subplot matplotlib?

Di sana, solusinya adalah membuat persegi panjang rect dengan koordinat sumbu subplot baru di dalam gambar dan kemudian memanggil ax = WindroseAxes(fig, rect)

Contoh yang lebih mudah dipahami adalah

from windrose import WindroseAxes
from matplotlib import pyplot as plt
import numpy as np
ws = np.random.random(500) * 6
wd = np.random.random(500) * 360

fig=plt.figure()
rect=[0.5,0.5,0.4,0.4] 
wa=WindroseAxes(fig, rect)
fig.add_axes(wa)
wa.bar(wd, ws, normed=True, opening=0.8, edgecolor='white')

plt.show()

(b) menambahkan proyeksi

Sekarang mungkin agak mengganggu untuk membuat persegi panjang ini dan akan jauh lebih baik untuk dapat menggunakan fungsionalitas subplot matplotlib.
Satu saran yang telah dibuat di sini adalah mendaftarkan WindroseAxes sebagai proyeksi ke dalam matplotlib. Untuk tujuan ini, Anda perlu mengedit file windrose.py di site-packages/windrose sebagai berikut:

  1. Sertakan impor from matplotlib.projections import register_projection di awal file.
  2. Kemudian tambahkan variabel nama:

    class WindroseAxes(PolarAxes):
        name = 'windrose'
        ...
    
  3. Akhirnya, di akhir windrose.py, Anda menambahkan:

    register_projection(WindroseAxes)
    

Setelah selesai, Anda dapat dengan mudah membuat sumbu windrose menggunakan argumen proyeksi ke sumbu matplotlib:

from matplotlib import pyplot as plt
import windrose
import matplotlib.cm as cm
import numpy as np

ws = np.random.random(500) * 6
wd = np.random.random(500) * 360

fig = plt.figure()
ax = fig.add_subplot(221, projection="windrose")

ax.contourf(wd, ws, bins=np.arange(0, 8, 1), cmap=cm.hot)

ax.legend(bbox_to_anchor=(1.02, 0))
plt.show()
7
Community 23 Mei 2017, 11:46

Untuk membuat subplot pada skala yang sama (misalnya untuk data bulanan), cukup tambahkan argumen rmax dalam fungsi add_subplot. Bagi saya bekerja:

ax = fig.add_subplot(nrows, ncols, month, projection="windrose", rmax = 50)
1
user12182579 8 Oktober 2019, 13:19