我想展示变更卡。我有这个数据库(ChangeEU)
Latitude Longitude Altitude Value O18d
0 30.0 -30.0 0.0 1.262094 1.262094
1 30.0 -29.9 0.0 1.269815 1.269815
2 30.0 -29.8 0.0 1.277522 1.277522
3 30.0 -29.7 0.0 1.285215 1.285215
4 30.0 -29.6 0.0 1.292893 1.292893
... ... ... ... ... ...
359995 69.9 59.5 68.0 -1.237269 -1.373269
359996 69.9 59.6 74.0 -1.235324 -1.383324
359997 69.9 59.7 52.0 -1.233395 -1.337395
359998 69.9 59.8 71.0 -1.231478 -1.373478
359999 69.9 59.9 68.0 -1.229575 -1.365575
我用这个代码显示它
import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits import basemap
from scipy.stats import norm
from mpl_toolkits.basemap import Basemap
from scipy.stats import norm
from matplotlib import colors
from matplotlib.patches import Path, PathPatch
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
import pandas as pd
from Data_Prep_Paper import *
def load_ChangeEU():
ChangeEU = dflediffan
return ChangeEU
def base_data(ChangeEU):
return{
'late':np.array(ChangeEU['Latitude']),
'lone':np.array(ChangeEU['Longitude']),
'vale':np.array(ChangeEU['O18d']),
}
def plot_Diff(data):
fig = plt.figure(figsize=(10, 10))
ax =fig.add_subplot(221)
ax.set_title("Annual Change EU PRÜFEN OB DATEN DIE RICHTIGEN SIND", fontsize = 10)
m = basemap.Basemap(llcrnrlon=-30, llcrnrlat=30,urcrnrlon=60,urcrnrlat=70, resolution='l',area_thresh=1000)
m.drawcoastlines(color = 'black')
x,y = m(data['lone'],data['late'])
divnorm=colors.TwoSlopeNorm(vmin=-8., vcenter=0., vmax=3)
m.contourf(x,y,data['vale'],32, tri=True,norm=divnorm, cmap = 'PuBu_r')
plt.colorbar(location='bottom',pad=0.04,fraction=0.08)
x0,x1 = ax.get_xlim()
y0,y1 = ax.get_ylim()
map_edges = np.array([[x0,y0],[x1,y0],[x1,y1],[x0,y1]])
polys = [p.boundary for p in m.landpolygons]
polys = [map_edges]+polys[:]
codes = [
[Path.MOVETO]+[Path.LINETO for p in p[1:]]
for p in polys
]
polys_lin = [v for p in polys for v in p]
codes_lin = [xx for cs in codes for xx in cs]
path = Path(polys_lin, codes_lin)
patch = PathPatch(path,facecolor='white', lw=0)
ax.add_patch(patch)
ChangeEU = load_ChangeEU()
base_data = base_data(ChangeEU)
plot_Diff(base_data)
plt.show()
输出是这样的:
如您所见,颜色条标有十进制数字。但是,我希望颜色条中的深蓝色为-10,红色端为2。如何在不更改色标的情况下手动设置它?我已经尝试过使用蜱虫,但这并没有改变结果,并且 manuel.ticks 也不适合我。
这似乎在设置颜色条的限制方面起作用。不确定它是否符合您要求的原始比例。
我们制作了一个将数据值映射到颜色的
ScalarMappable
。它根据您提供的 norm=
和指定的颜色图进行映射。限制由提供给 norm=
的对象决定(在本例中为 divnorm
),
替换
plot_Diff()
中的这些行:
divnorm=colors.TwoSlopeNorm(vmin=-8., vcenter=0., vmax=3)
m.contourf(x,y,data['vale'],32, tri=True,norm=divnorm, cmap = 'PuBu_r')
plt.colorbar(location='bottom',pad=0.04,fraction=0.08)
与
from matplotlib.cm import ScalarMappable
divnorm = colors.TwoSlopeNorm(vmin=-10, vcenter=0., vmax=4)
scalar_mapper = ScalarMappable(norm=divnorm, cmap='RdBu_r')
m.contourf(x, y, data['vale'], 32, tri=True)
fig.colorbar(mappable=scalar_mapper, location='bottom',
pad=0.04, fraction=0.08, label='colorbar')