Rumah >pembangunan bahagian belakang >Tutorial Python >Cara memplot tatasusunan ketumpatan menggunakan matplotlib.pyplot.contourf
Saya mempunyai set data xarray yang dipanggil dens dan saya ingin merancangnya.
Ini ialah set data:
<xarray.dataset> dimensions: (time: 641, lat: 30, lon: 30) coordinates: * time (time) datetime64[ns] 2013-07-01t12:00:00 ... 2013-08-02t12:00:00 * lon (lon) float64 32.73 32.83 32.94 33.05 ... 35.53 35.64 35.75 35.85 * lat (lat) float64 31.08 31.27 31.47 31.66 ... 36.06 36.25 36.44 36.63 data variables: density (time, lat, lon) float64 2e+03 0.0 0.0 0.0 0.0 ... 0.0 0.0 0.0 0.0
Saya menggunakan arahan
plt.contourf(dens.density.values[-1,:,:]);
merancangnya dan ia berfungsi, tetapi kerana saya mahu garis pantai juga diplot pada plot itu, saya juga cuba menggunakan
m = basemap(llcrnrlon=data['lon'].min(), llcrnrlat=data['lat'].min(), urcrnrlon=data['lon'].max(), urcrnrlat=data['lat'].max(), resolution='i', suppress_ticks=1) m.drawcoastlines(); m.fillcontinents(color='gray',lake_color='gray');
Tetapi apabila saya menjalankan semua arahan dan kemudian plt.show()
plot kontur hilang dan semua yang ditunjukkan kepada saya ialah garis pantai.
Bagaimana untuk menyelesaikan masalah ini untuk mendapatkan peta kontur + peta garis pantai dalam rajah yang sama?
Maaf jika ini soalan bodoh tetapi saya agak baru dengan python
Terima kasih atas bantuan anda,
Yutam
Edit: Saya baru sedar sekarang bahawa saya cuba menggabungkan dua "kit alat" yang berbeza dan semua ini boleh dilakukan dengan hanya menggunakan kit alat peta asas, tetapi hanya cuba menulis
m.contourf(dens.density.values[-1,:,:]);
memberi saya ralat ini:
--------------------------------------------------------------------------- typeerror traceback (most recent call last) cell in[21], line 1 ----> 1 m.contourf(dens.density.values[-1,:,:]) typeerror: basemap.contourf() missing 2 required positional arguments: 'y' and 'data'
Suntingan lain: Saya terus menemui lebih banyak lagi dan selepas membaca dokumentasi untuk peta asas saya menyedari sintaks arahan sepatutnya seperti ini
m.contourf(dens.lon.values,dens.lat.values,dens.密度.values[-1,:,:]);
Tetapi sekarang saya mendapat ralat ini:
IndexError: too many indices for array: array is 1-dimensional, but 2 were indexed
Saya rasa ini kerana tatasusunan ketumpatan saya ialah 2D, tetapi bagaimanakah cara saya mengekstrak nilai ketumpatan daripadanya? Saya menggunakan [-1] dalam dimensi masa kerana saya sebenarnya hanya memerlukan langkah kali terakhir
Terima kasih sekali lagi terlebih dahulu, Yotam
Suntingan Terakhir
Ini adalah plot terakhir, bagaimana saya boleh menjadikan tanah sekeliling berwarna kelabu dan bukannya ungu? Juga, adakah terdapat cara untuk menerangkan kawasan geografi yang lebih besar, lebih besar sedikit, tanpa mengacaukan data?
Berikut ialah nombor baharu untuk data sebenar saya
Memplot menggunakan peta asas dan xarray telah dibincangkan di sini一个>.
m = basemap(llcrnrlon=data['lon'].min(), llcrnrlat=data['lat'].min(), urcrnrlon=data['lon'].max(), urcrnrlat=data['lat'].max(), resolution='i', suppress_ticks=1) m.drawcoastlines(); m.fillcontinents(color='gray',lake_color='gray') dens.density[-1,:,:].plot.contourf() plt.show()
Kod di atas sepatutnya berfungsi. Saya menggunakan cartopy untuk mengendalikan ciri seperti garis pantai dan sempadan. Di bawah ialah coretan kod yang berfungsi untuk anda cuba menggunakan set data.
import xarray as xr import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cf ds = xr.open_dataset('filename.nc') fig = plt.figure(figsize=(8,8)) crs=ccrs.platecarree() ax = fig.add_subplot(1,1,1, projection=crs) gl = ax.gridlines(crs=crs, draw_labels=true, linewidth=0.01, color='gray', alpha=0.5, linestyle='-.') ax.add_feature(cf.coastline.with_scale("50m"), lw=0.5) ax.add_feature(cf.borders.with_scale("50m"), lw=0.3) ds.density[-1,:,:].plot.contourf() plt.show()
Untuk menetapkan semua ungu (sifar) kepada putih anda boleh menggunakan cmap berikut.
from matplotlib.colors import LinearSegmentedColormap cm = LinearSegmentedColormap.from_list('', ['white', *plt.cm.Blues(np.arange(255))]) ds.density[-1,:,:].plot.contourf(cmap=cm)
Atas ialah kandungan terperinci Cara memplot tatasusunan ketumpatan menggunakan matplotlib.pyplot.contourf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!