代码之家  ›  专栏  ›  技术社区  ›  Gilfoyle

如何用颜色梯度填充直方图,其中一个固定点代表颜色图的中间

  •  1
  • Gilfoyle  · 技术社区  · 6 年前

    此代码

    导入numpy as np 将matplotlib.pyplot导入为plt 定义randn(n,sigma,mu): 返回sigma*np.random.randn(n)+mu X=Randn(1000,40.,-100.) cm=plt.cm.get_cmap(“地震”)。 图=plt.图()) ax=图添加子批次(1,1,1) _,箱,补丁=ax.hist(x,color=“r”,箱=30) 料仓中心=0.5*(料仓[:-1]+料仓[1:] col=bin_中心-最小(bin_中心) col/=最大值(col) 对于c,p-in-zip(col,patches): PLT.SETP(P,“面色”,cm(c))。 plt.savefig(“b.png”,dpi=300,bbox_inches=“tight”)。

    生成以下柱状图

    我想使用发散颜色图seismicand would like to have all bars representation of negative numbers to be bluish and all bars representation positive numbers red.在零附近,条形图应该是白色的。因此,第一张图应该大部分是红色的,最后一张应该大部分是蓝色的。我怎样才能做到?

    生成以下柱状图

    This graph should be mostly reddish This graph should be mostly bluish

    我想用分色地图 seismic 希望所有表示负数出现的条都是蓝色的,所有表示正数的条都是红色的。在零附近,条形图应该是白色的。因此,第一张图应该大部分是红色的,最后一张应该大部分是蓝色的。我怎样才能做到?

    1 回复  |  直到 6 年前
        1
  •  1
  •   ImportanceOfBeingErnest    6 年前

    如果这只是关于视觉外观,则可以将颜色规格化为最大绝对值和其负相对值之间的范围,这样,零总是在中间( max bins )。

    import numpy as np;np.random.seed(42)
    将matplotlib.pyplot导入为plt
    plt.rcparams[“Figure.FigSize”]=6.4,4
    
    定义randn(n,sigma,mu):
    返回sigma*np.random.randn(n)+mu
    
    x1=randn(999,40.,-80)
    x2=randn(750、40、80)
    x3=兰登(888,16.,-30)
    
    
    def hist(x,ax=无):
    cm=plt.cm.get_cmap(“地震”)。
    ax=ax或plt.gca()。
    _,箱,补丁=ax.hist(x,color=“r”,箱=30)
    
    料仓中心=0.5*(料仓[:-1]+料仓[1:]
    最大值=np.abs(bin_中心).max()
    norm=plt.正火(-maxi,maxi)
    
    对于c,p-in-zip(bin_中心,补丁):
    plt.setp(p,“面色”,cm(norm(c)))
    
    
    图,轴=plt.子批次(nrows=3,sharex=true)
    
    对于x,ax in zip([x1,x2,x3],轴):
    历史(x,ax=ax)
    
    请显示())
    

    h零总是在中间(max |bins|)

    import numpy as np; np.random.seed(42)
    import matplotlib.pyplot as plt
    plt.rcParams["figure.figsize"] = 6.4,4
    
    def randn(n, sigma, mu):
        return sigma * np.random.randn(n) + mu
    
    x1 = randn(999, 40., -80)
    x2 = randn(750, 40., 80)
    x3 = randn(888, 16., -30)
    
    
    def hist(x, ax=None):
        cm = plt.cm.get_cmap("seismic")
        ax = ax or plt.gca()
        _, bins, patches = ax.hist(x,color="r",bins=30)
    
        bin_centers = 0.5*(bins[:-1]+bins[1:])
        maxi = np.abs(bin_centers).max()
        norm = plt.Normalize(-maxi,maxi)
    
        for c, p in zip(bin_centers, patches):
            plt.setp(p, "facecolor", cm(norm(c)))
    
    
    fig, axes = plt.subplots(nrows=3, sharex=True)
    
    for x, ax in zip([x1,x2,x3], axes):
        hist(x,ax=ax)
    
    plt.show()
    

    enter image description here