2016-07-29 13 views
5

Vấn đềPython-Tôi nên sử dụng lược đồ colormap nào cho dữ liệu đẳng cấp-ish?

Tôi có cốt truyện tôi đang cố gắng tạo ra các xu hướng về tỷ lệ mưa trên toàn thế giới bằng cách sử dụng dữ liệu bị chặn. Tôi có thể làm cho cốt truyện chính nó tốt, nhưng phạm vi màu sắc cho tôi vấn đề. Tôi không thể tìm ra cách làm cho bản đồ màu phù hợp hơn với dữ liệu của tôi, có vẻ như theo cấp số nhân. Tôi đã thử một phạm vi lôgarít, nhưng nó không hoàn toàn phù hợp với dữ liệu.

Mã & dữ liệu phạm vi

Đây là những gì 8192 giá trị dữ liệu của tôi trông giống như khi vẽ theo thứ tự trên một cốt truyện dòng x-y đơn giản. Điểm dữ liệu nằm trên trục x & giá trị nằm trên trục y. enter image description here

Dưới đây là những gì dữ liệu của tôi trông giống như được vẽ bằng phạm vi màu LogNormal. Có quá nhiều màu xanh bạc hà & màu cam đỏ cho tôi.

#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

Và đây là những gì nó trông giống như một mặc định, phạm vi màu sắc không thay đổi gì. (Cùng một mã trừ đi tiêu = tham số định mức.)

enter image description here

Câu hỏi

Có một chương trình toán học tôi có thể sử dụng để tạo ra một bản đồ màu đó tốt hơn cho thấy một loạt các dữ liệu của tôi? Hay tôi cần phải tạo một phạm vi tùy chỉnh?

+2

Vì vậy, nếu đó là màu bạn không thích, bạn có thể chọn một bản đồ màu khác. Dưới đây là danh sách các colormaps có thể có. http://matplotlib.org/examples/color/colormaps_reference.html. Bạn cũng có thể kiểm tra xem 'PowerNorm'instead của' LogNorm' có tốt hơn cho những gì bạn muốn hiển thị hay không. – cel

+0

Nó không phải là quá nhiều màu sắc vì nó là phạm vi. Nếu tôi có thể nhận được nhiều blues, cyans và vàng hơn để hiển thị trên bản đồ, tôi sẽ rất vui. Dù sao thì, tôi đã chơi với PowerNorm trước đó và có vẻ như không hoạt động, nhưng tôi đã thử lại lần nữa và sau khi tôi đặt vmax = 3, bây giờ nó trông thậm chí còn nặng hơn, mặc dù hơi nặng về màu xanh đậm cho tất cả giá trị bằng không. (Tôi không thể làm gì nhiều về điều đó.) Đăng câu trả lời này và tôi sẽ chấp nhận nó. – ChristineB

+0

Trên ghi chú liên quan: [vui lòng không sử dụng bản đồ phản lực] (http://stats.stackexchange.com/questions/223315/why-use-colormap-viridis-over-jet). Vì phần màu vàng của bản đồ màu sáng hơn các phần màu đỏ hoặc màu xanh, nó thu hút sự chú ý đến các giá trị trung bình của mảng của bạn, điều này ít quan tâm nhất từ ​​quan điểm trực quan hóa dữ liệu. Có [nhiều colormaps thích hợp hơn] (http://matplotlib.org/users/colormaps.html) sẽ giúp các ô của bạn trông đẹp hơn :). – Andreq

Trả lời

0

một hack

Bạn có thể thử áp dụng một giá trị tối đa, tức là đối với bất kỳ giá trị trên 2 chỉ đơn giản là thay thế nó bằng 2.

Sau đó, bạn sẽ có một màu duy nhất (tối đa) đại diện cho 2+ và phần còn lại của màu sắc sẽ được trải đều trên dữ liệu của bạn đồng đều hơn.

+0

Tôi đã làm điều đó cuối cùng, nhưng tôi cũng cần phải chuyển đổi bình thường hóa thành PowerNorm & chơi với quy mô. – ChristineB

Các vấn đề liên quan