2016-07-29 12 views
5

KwestiaPython - jaki schemat mapy powinienem używać dla danych wykładniczych?

mam działkę próbuję zrobić za trendami stóp opadowych z całego świata na podstawie danych z siatką. Mogę sprawić, że fabuła będzie dobrze, ale zakres kolorów daje mi problemy. Nie mogę wymyślić, jak sprawić, by colormap lepiej pasował do moich danych, co wydaje się być wykładnicze. Wypróbowałem zakres logarytmiczny, ale nie pasuje on do danych.

Kod & zakres danych

Oto co moi 8192 wartości danych wyglądać, gdy wykreślane w kolejności na prostej x-y linii działki. Punkty danych znajdują się na osi X & wartości są na osi Y. enter image description here

Oto, jak moje dane wyglądają jak wykreślone z gamą kolorów LogNormal. Zbyt dużo miętowej zieleni jest dla mnie pomarańczowo-czerwone.

#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) 

enter image description here

A oto jak to wygląda z domyślnie niezmieniony zakres kolorów. (Ten sam kod minus normą = argumentem normą.)

enter image description here

Pytanie

Czy istnieje matematyczny schemat można używać do tworzenia colormap że lepiej pokazuje zakres moich danych? Czy muszę zrobić niestandardowy zakres?

+2

Więc jeśli to kolory, których nie lubisz, możesz wybrać inną mapę kolorów. Oto lista możliwych map kolorów. http://matplotlib.org/examples/color/colormaps_reference.html. Możesz również chcieć sprawdzić, czy 'PowerNorm' w wersji' LogNorm' jest lepszy dla tego, co chcesz pokazać. – cel

+0

To nie tyle same kolory, co zakres. Gdybym mógł zdobyć więcej błękitów, cyjanów i żółci, aby pokazać się na mapie, byłbym szczęśliwy. W każdym razie, grałem wcześniej z PowerNormem i nie działało, ale spróbowałem go ponownie i po ustawieniu vmax = 3, teraz wygląda na bardziej równomierny, choć trochę ciężki na ciemnym błękicie dla wszystkich zero wartości. (Niewiele mogę z tym zrobić.) Napisz to jako odpowiedź, a ja to zaakceptuję. – ChristineB

+0

W powiązanej notatce: [proszę nie używać mapy kolorów] (http://stats.stackexchange.com/questions/223315/why-use-colormap-viridis-over-jet). Ponieważ żółta część mapy kolorów jest jaśniejsza niż czerwone lub niebieskie części, zwraca uwagę na środkowe wartości twojej tablicy, które są najmniej interesujące z punktu widzenia wizualizacji danych. Istnieje [dużo bardziej odpowiednich colormapsów] (http://matplotlib.org/users/colormaps.html), które pomogą twoim działkom wyglądać lepiej :). – Andreq

Odpowiedz

0

hack

Można spróbować stosowania maksymalną wartość, to znaczy do dowolnej wartości powyżej 2 po prostu zastąpić go 2.

Wtedy masz jeden kolor (Maksymalna) reprezentujący 2+ i tym reszta kolorów będzie bardziej równomiernie rozłożona na twoich danych.

+0

Zrobiłem to w końcu, ale musiałem też zmienić normalizację na PowerNorm i bawić się skalą. – ChristineB

Powiązane problemy