0

mpl_toolkits.basemap の SymLogNorm セクションを使用すると問題が発生します。対数スケールで負と正の両方の値を持つ対数スケールの等高線図が必要です (したがって、SymLogNorm を使用します)。ただし、使用するたびに、正と負の値のみを示すプロットが表示されます (以下を参照)。散布図の例を使用する場合は正常に機能しますが、マップ上にプロットする場合は機能しません。

画像!

私が必要としているものを手に入れる方法についての助けは非常に高く評価されます.

乾杯

import matplotlib.pyplot as plt
import matplotlib.cm as cm
import matplotlib as mpl
import numpy as np
from mpl_toolkits.basemap import Basemap

lon = [-180,-140,-100,-60,-20,0,20,60,100,140,180]
lat = [90,70,50,30,10,-10,-30,-50,-70,-90]
bc = [[1,4,5,5,5,4,0.1,-0.2,-0.03,0,1],[0.1,1,1,0.8,-0.6,-0.005,0,0,-0.9,-0.004,-0.5],[0.7,0.07,0,0,0,0.6,0.1,-2.3,1,1,1.5],[1,1,0,-0.1,0,-0.5,1,1.2,2,11,3],[1,4,5,5,5,4,0.1,-0.2,-0.03,0,-0.9],[0.1,1,1,0.8,-0.6,-0.005,0,0,-0.9,-0.004,-0.08],[0.7,0.07,0,0,0,0.6,0.1,-2.3,1,1,0],[1,1,0,-0.1,0,-0.5,1,1.2,2,11,3],[1,1,0,-0.1,0,-0.5,1,1.2,2,11,2],[1,1,0,-0.1,0,-0.5,1,1.2,3,0,0.3]]
 #Draw Map
    # use low resolution coastlines.
map = Basemap(projection='cyl',lat_0=0.,lon_0=0,resolution='l')
    # draw coastlines, country boundaries, fill continents.
map.drawcoastlines(linewidth=0.75)
map.drawcountries(linewidth=0.25)
map.fillcontinents #(color='grey',lake_color='white')
# draw the edge of the map projection region 
map.drawmapboundary(fill_color='white')
    #draw lat/lon grid lines every 30 degrees.
map.drawmeridians(np.arange(-180,180,30)) 
map.drawparallels(np.arange(-90,90,30))

    #map completed, now ask which month you want data for
    #make grid on world map from the long/lat in the data (shape of bc)

lon, lat = np.meshgrid(lon, lat)    
    #make those the x and y axis, but in map form
x, y =map(lon,lat)


    #Clear plot and choose colour maps
plt.clf()
my_cmap = cm.get_cmap('brg')
tickld = [-10,-1,-1e-1,-1e3,1e3,1e-1,1,10]
norm=mpl.colors.SymLogNorm(linthresh=1e-4, vmin=-100, vmax=100)
#plot the filled contour map, using levels, colours and a log scale for the     colourbar
cs = map.contourf(x,y,bc,levels=tickld,cmap=my_cmap,norm = norm)

    #create the colour bounds for the colour map (same as for the plot)


cb1 = plt.colorbar(cmap=my_cmap, 
        norm=norm,
        extend='both',
        orientation="vertical",
        ticks=tickld,
        shrink = 0.38,
        fraction = 0.01)



    #add coastlines on top of plot
map.drawcoastlines(linewidth=0.75)
map.drawcountries(linewidth=0.25)
    #show plot
plt.show()
4

1 に答える 1

0

問題が解決しました!!!

SymLogNorm は、しきい値として負の数の指数を使用することを好みません。

これを回避するには、1e-4 のようなものを入れる代わりに、代わりに 0.0001 を入れます。

シンプルだけどもどかしい!!!

于 2013-12-02T17:46:21.750 に答える