Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 色阶-接近但不够接近_Python_Numpy_Plot_Colormap - Fatal编程技术网

Python 色阶-接近但不够接近

Python 色阶-接近但不够接近,python,numpy,plot,colormap,Python,Numpy,Plot,Colormap,我正在尝试制作一个与大都会办公室使用相同色阶的绘图,这样我就可以轻松地将我的绘图与他们的绘图进行比较。他们的一个例子是 我目前最接近的努力是: 我知道我的代码很凌乱——我找不到一种方法来为高于某个阈值的值设置颜色(否则它会变成白色),因此循环 我会上传NetCDF文件,但我没有足够高的代表来做这件事 非常非常感谢您的帮助 我的绘图代码如下所示 from Scientific.IO.NetCDF import NetCDFFile from mpl_to

我正在尝试制作一个与大都会办公室使用相同色阶的绘图,这样我就可以轻松地将我的绘图与他们的绘图进行比较。他们的一个例子是

我目前最接近的努力是:

我知道我的代码很凌乱——我找不到一种方法来为高于某个阈值的值设置颜色(否则它会变成白色),因此循环

我会上传NetCDF文件,但我没有足够高的代表来做这件事

非常非常感谢您的帮助

我的绘图代码如下所示

from Scientific.IO.NetCDF import NetCDFFile                     
from mpl_toolkits.basemap import Basemap                     
from matplotlib import pyplot as plt                      
import numpy as np


myfile = NetCDFFile('ERA_Dec_89-94.nc', 'r')   
Lat = NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/latitudes_d02.nc','r')
Long = NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/longitudes_d02.nc','r')


XLAT = Lat.variables['XLAT'][:]     
XLONG = Long.variables['XLONG'][:]      
ERA_Data = myfile.variables['Monthlyrain'][:]

plot = np.zeros([1000,1730])

plot[:,:] = np.average(ERA_Data[:,:,:],axis=0)

m = Basemap(projection='merc',resolution='f',llcrnrlat=49,llcrnrlon=-11,urcrnrlat=61,urcrnrlon=3)
m.drawparallels(np.arange(-90., 91., 5.), labels=[1,0,0,0], fontsize=11)
m.drawmeridians(np.arange(-180., 181., 5.), labels=[0,0,0,1], fontsize=11)
m.drawcoastlines()


X, Y = m(XLONG, XLAT)

for i in range(0,1729):
    for j in range(0,999):
         if plot[j,i] >250:
             plot[j,i] = 250.001
         if plot[j,i] < 40:
             plot[j,i] = 40

scale = [40,40.001,60,80,100,125,150,200,250, 250.001]
cs = m.contourf(X,Y,plot,scale, cmap='PuOr')
cbar = m.colorbar(cs, ticks=  [40.0005,50,70,90,112.5,137.5,175,225,250.0005])
cbar.set_ticklabels(['<40','40-60', '60-80', '80-100', '100-125', '125-150', '150-200', '200-250', '>250'])

plt.title('Some Title')
cbar.set_label('Monthly average rainfall (mm)')

print "Finished"

plt.show()
从Scientific.IO.NetCDF导入NetCDFFile
从mpl_toolkits.basemap导入basemap
从matplotlib导入pyplot作为plt
将numpy作为np导入
myfile=NetCDFFile('ERA\u Dec\u 89-94.nc','r')
Lat=NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/latitudes_d02.NC',r')
Long=NetCDFFile('/home/james/Documents/Lat_Lon_NC_Files/longitus_d02.NC','r')
XLAT=Lat.variables['XLAT'][:]
XLONG=Long.variables['XLONG'][:]
ERA_Data=myfile.variables['Monthlyrain'][:]
绘图=np.零([10001730])
绘图[:,:]=np.平均值(ERA_数据[:,:,:],轴=0)
m=底图(投影=merc',分辨率=f',llcrnrlat=49,llcrnrlon=-11,urcrnrlat=61,urcrnrlon=3)
m、 drawparallels(np.arange(-90,91,5.),标签=[1,0,0,0],字体大小=11)
m、 DrawMeridian(np.arange(-180,181,5.),标签=[0,0,0,1],fontsize=11)
m、 海岸线
十、 Y=m(XLONG,XLAT)
对于范围(01729)内的i:
对于范围(0999)内的j:
如果绘图[j,i]>250:
图[j,i]=250.001
如果图[j,i]<40:
图[j,i]=40
刻度=[40,40.001,60,801001125150200250250.001]
cs=m.f(X,Y,绘图,比例,cmap='PuOr')
cbar=m.colorbar(cs,ticks=[40.0005,50,70,90112.5137.5175225250.0005])
cbar.set_标签(['250'])
plt.title(“某些标题”)
cbar.set_标签(“月平均降雨量(mm)”)
打印“已完成”
plt.show()

如果问题只是颜色贴图,您可以从屏幕上选取颜色的RGB分量,并将其转换为一个颜色,映射到您给出的图表中的降雨边界,作为示例。比如说,

bounds = [0, 40, 60, 80, 100, 125, 150, 200, 250, 1000]
rgblist = [(51,0,0), (102,51,0), (153,102,51), (204,153,102), (255, 255, 255),
           (204,204,255), (153,153,255), (51,102,255), (0,0,153)]
clist = [[c/255 for  c in rgb] for rgb in rgblist]

from matplotlib import colors
cmap = colors.ListedColormap(clist)
norm = colors.BoundaryNorm(bounds, cmap.N)

ax.imshow(arr, cmap=cmap, norm=norm)
plt.show()
第一部分(正确选择颜色)。为了将值限制在某个范围内,您有几个选项

  • 使用
    cmap.set_覆盖
    cmap.set_覆盖
    设置边界颜色,如前所述

  • 使用而不是循环将值限制在一定范围内:

    plot=np.clip(plot,40250)


到底是什么问题?你想让颜色更接近吗?是否要将打印限制为地块?完全是别的吗?你的问题越具体,别人得到好答案的几率就越高……对不起,我需要帮助的两个部分是颜色匹配更紧密(我想xnx已经回答了,所以我会试一试),以及如何将颜色分配给任何超过阈值的值(消除循环的需要)谢谢你的回答-我会试试的!问题-在哪里可以找到每种颜色的编号?如何知道RGBlist要使用哪些值?谢谢有很多工具可以用来做这件事。例如,在Mac电脑上,in-Applications/Utilities/Digital Color Meter是一种用于确定光标下像素的RGB分量的应用程序。不幸的是,它产生了这种绘图plot=np.clip(plot,40250)边界=[0,40,60,80,100,125,150,200,250,300]rgblist=[(51,25,0),(102,51,0),(153,76,0),(239159,80),(255,255),(153204255),(51153255),(0102204),(2,2128)]clist=[c/255表示rgb中的c]表示rgb中的rgb=cmap=colors.ListedColormap norm=colors.BoundaryNorm=colors(bounds,cmap.N)cs=m.contourf(X,Y,plot,bounds,cmap=cmap,norm=norm)cbar=m.colorbar(cs,ticks=[20,50,70,90112.5137.5175225275])cbar.set_ticklabels(['250'))