2016-07-29 10 views
5

sorunu ben Gridlenmiş verileri kullanarak dünya çapında yağış oranlarının eğilimleri yapmaya çalışıyorum bir arsa varPython - Üstel-ish verileri için hangi colormap şemasını kullanmalıyım?

. Çizgiyi iyi yapabilirim, ama renk yelpazesi bana sorun veriyor. Renk haritasının verimime daha iyi uyduğunu anlayamıyorum, bu da üstel gibi görünüyor. Logaritmik aralığı denedim, ancak veriyi tam olarak uymuyor.

kod & veri aralığı

İşte benim 8192 veri değerlerinin basit x-y çizgi arsa üzerinde sırayla çizilen zaman benziyorsun. Veri noktaları x ekseninde & değerleri y eksenindedir. enter image description here

Verilerim, LogNormal renk aralığı ile çizilen gibi görünüyor. Benim için çok fazla nane yeşili & turuncu-kırmızı.

enter image description here

#Set labels 
lonlabels = ['0','45E','90E','135E','180','135W','90W','45W','0'] 
latlabels = ['90S','60S','30S','Eq.','30N','60N','90N'] 

#Set cmap properties 
norm = colors.LogNorm() #creates logarithmic scale 

#Create basemap 
fig,ax = plt.subplots(figsize=(15.,10.)) 
m = Basemap(projection='cyl',llcrnrlat=-90,urcrnrlat=90,llcrnrlon=0,urcrnrlon=360.,lon_0=180.,resolution='c') 
m.drawcoastlines(linewidth=1) 
m.drawcountries(linewidth=1) 
m.drawparallels(np.arange(-90,90,30.),linewidth=0.3) 
m.drawmeridians(np.arange(-180.,180.,45.),linewidth=0.3) 
meshlon,meshlat = np.meshgrid(lon,lat) 
x,y = m(meshlon,meshlat) 

#Plot variables 
trend = m.pcolormesh(x,y,lintrends[:,:,0],cmap='jet', norm=norm, shading='gouraud') 

#Set plot properties 
#Colorbar 
cbar=m.colorbar(trend, size='8%',location='bottom',pad=0.8) #Set colorbar 
cbar.set_label(label='Linear Trend (mm/day/decade)',size=25) #Set label 
for t in cbar.ax.get_xticklabels(): 
    t.set_fontsize(25) #Set tick label sizes 
#Titles & labels 
fig.suptitle('Linear Trends of Precipitation (CanESM2)',fontsize=40,x=0.51,y=0.965) 
ax.set_title('a) 1979-2014 Minimum Trend',fontsize=35) 
ax.set_xticks(np.arange(0,405,45)) 
ax.set_xticklabels(lonlabels,fontsize=20) 
ax.set_ylabel('Latitude',fontsize=25) 
ax.set_yticks(np.arange(-90,120,30)) 
ax.set_yticklabels(latlabels,fontsize=20) 
Ve işte varsayılan, değiştirilmemiş renk aralığı ile böyle görünüyor. (Aynı kod eksi norm = norm argüman.)

enter image description here

soru

daha iyi benim veri aralığını gösteren bir renk haritası oluşturmak için kullanabileceğiniz bir matematiksel düzeni var mı? Ya da özel bir aralık oluşturmam gerekiyor mu?

+2

Beğenmediğiniz renklerse, farklı bir renk haritası seçebilirsiniz. İşte olası renk haritalarının listesi. http://matplotlib.org/examples/color/colormaps_reference.html. Ayrıca göstermek istediğiniz şey için 'LogNorm'un PowerNorm'nın daha iyi olup olmadığını kontrol etmek isteyebilirsiniz. – cel

+0

Bu, aralığın kendisi kadar renklerin kendisi değil. Haritaya çıkacak daha fazla blues, cray ve sarı alabilseydim, mutlu olurdum. Her neyse, PowerNorm ile daha önce oynadım ve işe yaramadı, ama ben sadece bir daha denedim ve vmax = 3'ü ayarladıktan sonra, şimdi daha fazla görünüyor, hatta karanlık blues üzerinde biraz daha ağır görünüyor. sıfır değer. (Bu konuda fazla bir şey yapamam.) Bunu bir cevap olarak gönderin ve kabul edeceğim. – ChristineB

+0

İlgili bir notta: [lütfen jet renk haritasını kullanmayın] (http://stats.stackexchange.com/questions/223315/why-use-colormap-viridis-over-jet). Renk haritasının sarı kısmı kırmızı veya mavi parçalardan daha parlak olduğu için, dizinizin medyan değerlerine dikkat çeker, bu da veri görselleştirme açısından en az ilgi çekicidir. Arsalarınızın daha iyi görünmesine yardımcı olacak çok sayıda uygun renk haritası (http://matplotlib.org/users/colormaps.html) bulunmaktadır. – Andreq

cevap

0

A

kesmek Sen Sonra tek bir renk (maksimum) temsil eden 2+ ve olurdu sadece 2.

ile değiştirin 2'nin üzerinde herhangi bir değere yani için bir maksimum değeri uygulayarak deneyebilirsiniz

Renklerin geri kalanı verilerinize eşit olarak yayılacaktı.

+0

Sonunda bunu yaptım, fakat normalleştirmem için PowerNorm'a geçmem ve ölçek ile oynamam gerekiyordu. – ChristineB

İlgili konular