更改颜色栏上的刻度(手动)

问题描述 投票:0回答:1

我想展示变更卡。我有这个数据库(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 也不适合我。

python matplotlib colors
1个回答
1
投票

这似乎在设置颜色条的限制方面起作用。不确定它是否符合您要求的原始比例。

我们制作了一个将数据值映射到颜色的

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')
© www.soinside.com 2019 - 2024. All rights reserved.