精华内容
下载资源
问答
  • 模仿相关度热力图,使用Python Matplotlib绘制渐变色柱状图(bar)并加边框和配置渐变颜色条(colorbar)。

    热力图是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。目前,常见的是看数据表里多个特征两两的相关度热力图。

    基于此思想,做出柱状热力图,用于展现单个特征针对整体的相关度,以此列出所有特征,每个特征与整体的相关度,如下图所示。

    需求:

    (1)各个特征柱形条,按热力图规则采用渐变颜色,例如样图中采用’inferno’色带;
    (2)由于渐变的原因,会出现接近背景的颜色,需要给柱形条加外边框;
    (3)考虑过0的分界坐标;
    (4)加注颜色渐变条形颜色棒(Colorbar);
    (5)最好加上数据标注。

    在这里插入图片描述

    渐变颜色条采用matplotlib内置色带,也就是在cmap中提供了一些默认色带[color example code]
    在这里插入图片描述

    实现代码如下:

    import matplotlib.pyplot as plt
    from matplotlib import cm
    
    def draw_bar(key_name,key_values):
        plt.rcParams['font.sans-serif']=['SimHei'] #显示中文标签
        plt.rcParams['axes.unicode_minus']=False
        # 标准柱状图的值
        def autolable(rects):
            for rect in rects:
                height = rect.get_height()
                if height>=0:
                    plt.text(rect.get_x()+rect.get_width()/2.0 - 0.3,height+0.02,'%.3f'%height)
                else:
                    plt.text(rect.get_x()+rect.get_width()/2.0 - 0.3,height-0.06,'%.3f'%height)
                    # 如果存在小于0的数值,则画0刻度横向直线
                    plt.axhline(y=0,color='black')
        #归一化
        norm = plt.Normalize(-1,1)
        norm_values = norm(key_values)
        map_vir = cm.get_cmap(name='inferno')
        colors = map_vir(norm_values)
        fig = plt.figure() #调用figure创建一个绘图对象
        plt.subplot(111)
        ax = plt.bar(key_name,key_values,width=0.5,color=colors,edgecolor='black') # edgecolor边框颜色
        
        sm = cm.ScalarMappable(cmap=map_vir,norm=norm)  # norm设置最大最小值
        sm.set_array([])
        plt.colorbar(sm)
        autolable(ax)
        
        plt.show()
    
    if __name__ == '__main__':
    
        #multi_corr()
        key_name = ['时长','鹤位','设定量','发油量','发油率','时间','月份','日期','损溢量','温度','密度']
        key_values = [0.1,0.9,1,1,0.4,0.3,-0.1,-0.6,0.2,0.4,0.5]
        draw_bar(key_name,key_values)
    
    

    由于作者水平有限,欢迎讨论。

    参考:

    plt绘图颜色渐变以及colormap 一方的天地 2018.12
    Python实现柱状图【数字精准展示,使用不同颜色】 博客园 , 云山之巅 2019.07
    Matplotlib中柱状图bar使用 博客园 ,1直在路上1 ,2018.09
    colorbar for a broken bar chart Stack Overflow ,2017.05

    展开全文
  • 在import matplotlib.pyplot as plt import numpy as np import matplotlib.colors x, y= np.meshgrid(np.linspace(-3,3), np.linspace(-3,3)) r = np.sqrt(x**2+y**2) data = np.tan((r*0.7-1.5))*1.3 diffmap_17 =...

    问题是颜色是通过将最小值和最大值之间的范围等分来从颜色映射中选择的。由于大多数级别彼此非常接近,因此它们属于同一范围,因此具有相同的颜色。在

    最简单的解决方案不是使用colormap,而是使用一个绘图,其中每个级别都从colorlist获取其颜色。在这种情况下,您可以直接向contourf图提供颜色列表。在plt.contourf(x,y,data,contour_levels,colors=diffmap_17)

    注意,因为你有19个级别,你的列表需要18个颜色(因此我添加了一个)。在

    ^{pr2}$

    yB7eh.png

    如果您想改用colormap,则需要在colormap中提供一个规范化实例。matplotlib.colors.BoundaryNorm将根据提供给它的边界列表选择颜色,这将是等高线图的级别列表。在import matplotlib.pyplot as plt

    import numpy as np

    import matplotlib.colors

    x, y= np.meshgrid(np.linspace(-3,3), np.linspace(-3,3))

    r = np.sqrt(x**2+y**2)

    data = np.tan((r*0.7-1.5))*1.3

    diffmap_17 = ["#FF0000", "#F81318", "#F12731", "#EB3B4A", "#EB5C66", "#EB7D82",

    "#EB9E9E", "#F1BEBE", "#F8DEDE", "#FFFFFF", "#DDDCFD", "#BCB9FB",

    "#9B96FA", "#6A6CFA", "#3A43FA", "#1D21FC", "#0000FF", "#0000ce"]

    diffmap_17_colormap = matplotlib.colors.ListedColormap(diffmap_17)

    contour_levels = [-20, -10, -5, -2, -1, -0.75, -0.5, -0.25, -0.1, 0.0,

    0.1, 0.25, 0.5, 0.75, 1, 2, 5, 10, 20]

    norm = matplotlib.colors.BoundaryNorm(contour_levels, diffmap_17_colormap.N)

    cs = plt.contourf(x,y,data,contour_levels,cmap=diffmap_17_colormap, norm=norm)

    plt.colorbar(cs)

    plt.show()

    输出图同上。在

    展开全文
  • 本文代码运行在jupyter上 一.安装matplotlib pip3 install matplotlib 二.进入matplotlib查看源码 渐变柱状图官方示例

    本文代码运行在jupyter上
    一.安装matplotlib

    pip3 install matplotlib

    二.进入matplotlib查看源码
    渐变柱状图官方示例
    三.源码

    import matplotlib.pyplot as plt
    import numpy as np
    
    np.random.seed(19680801)
    def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs):
     """
        Draw a gradient image based on a colormap.
    
        Parameters
        ----------
        ax : Axes
            The axes to draw on.
        extent
            The extent of the image as (xmin, xmax, ymin, ymax).
            By default, this is in Axes coordinates but may be
            changed using the *transform* kwarg.
        direction : float
            The direction of the gradient. This is a number in
            range 0 (=vertical) to 1 (=horizontal).
        cmap_range : float, float
            The fraction (cmin, cmax) of the colormap that should be
            used for the gradient, where the complete colormap is (0, 1).
        **kwargs
            Other parameters are passed on to `.Axes.imshow()`.
            In particular useful is *cmap*.
        """
        phi = direction * np.pi / 2
        v = np.array([np.cos(phi), np.sin(phi)])
        X = np.array([[v @ [1, 0], v @ [1, 1]],
                      [v @ [0, 0], v @ [0, 1]]])
        a, b = cmap_range
        X = a + (b - a) / X.max() * X
        im = ax.imshow(X, extent=extent, interpolation='bicubic',
                       vmin=0, vmax=1, **kwargs)
        return im
    def gradient_bar(ax, x, y, width=0.5, bottom=0):
        for left, top in zip(x, y):
            right = left + width
            gradient_image(ax, extent=(left, right, bottom, top),
                           cmap=plt.cm.Blues_r, cmap_range=(0, 0.8))
                       
    xmin, xmax = xlim = 0, 10
    ymin, ymax = ylim = 0, 1
    
    fig, ax = plt.subplots()
    ax.set(xlim=xlim, ylim=ylim, autoscale_on=False)
    
    # background image
    gradient_image(ax, direction=0, extent=(0, 1, 0, 1), transform=ax.transAxes,
                   cmap=plt.cm.Oranges, cmap_range=(0.1, 0.6))
    
    N = 10
    x = np.arange(N) + 0.15
    y = np.random.rand(N)
    gradient_bar(ax, x, y, width=0.7)
    ax.set_aspect('auto')
    plt.show()
    

    四.分析

    np.random.seed(19680801)
    #numpy随机数,固定seed种子,这样每次生成的随机数都是固定的
    def gradient_image(ax, extent, direction=0.3, cmap_range=(0, 1), **kwargs):
    #定义了一个生成图片的方法,图片是渐变的 	
    """
    ax:画板
    extent:调整宽高比例
    direction:颜色渐变方向(0,1)0为竖直,1为水平
    cmap_range:颜色渐变的范围
    **kwargs:imshow中的参数
    """
        phi = direction * np.pi / 2     #角度值
        v = np.array([np.cos(phi), np.sin(phi)])#求解余弦正弦
        X = np.array([[v @ [1, 0], v @ [1, 1]],
                      [v @ [0, 0], v @ [0, 1]]])
                      #@号代表的是矩阵运算
        a, b = cmap_range#代表着颜色的最小啊范围和最大范围
        X = a + (b - a) / X.max() * X#用颜色范围调整数值
        im = ax.imshow(X, extent=extent, interpolation='bicubic',
                       vmin=0, vmax=1, **kwargs)
        """
        显示图片 
        vmin,vmax:图片的最大值和最小值,jpg(0,255)png(0,1)
        x:显示的图片数据
        interpolation:填充效果 “bicubic”渐变
        """
    
        return im
    
    def gradient_bar(ax, x, y, width=0.5, bottom=0):
             #bottom 初始坐标零点位置
        for left, top in zip(x, y):  #zip  同时取多个数组中的数据
            right = left + width
            gradient_image(ax, extent=(left, right, bottom, top),
                           cmap=plt.cm.Blues_r, cmap_range=(0, 0.8))
                       #cmap 柱子颜色 cmap_range 柱子颜色渐变范围
    N = 10
    x = np.arange(N) + 0.15  #柱子x坐标 整体右挪0.15
    y = np.random.rand(N)    #柱子高度随机数
    gradient_bar(ax, x, y, width=0.7)#width 柱子宽度
    ax.set_aspect('auto')#equal设置横纵坐标显示比例 equal刻度相等,auto刻度不相等
    plt.show()
    展开全文
  • 这是使用Alex的帖子中的想法的功能示例import matplotlib.pyplot as plt,numpy as npdef gauplot(centers, radiuses, xr=None, yr=None):nx, ny = 1000.,1000.xgrid, ygrid = np.mgrid[xr[0]:xr[1]:(xr[1]-xr[0])/nx...

    这是使用Alex的帖子中的想法的功能示例

    import matplotlib.pyplot as plt,numpy as np

    def gauplot(centers, radiuses, xr=None, yr=None):

    nx, ny = 1000.,1000.

    xgrid, ygrid = np.mgrid[xr[0]:xr[1]:(xr[1]-xr[0])/nx,yr[0]:yr[1]:(yr[1]-yr[0])/ny]

    im = xgrid*0 + np.nan

    xs = np.array([np.nan])

    ys = np.array([np.nan])

    fis = np.concatenate((np.linspace(-np.pi,np.pi,100), [np.nan]) )

    cmap = plt.cm.gray

    cmap.set_bad('white')

    thresh = 3

    for curcen,currad in zip(centers,radiuses):

    curim=(((xgrid-curcen[0])**2+(ygrid-curcen[1])**2)**.5)/currad*thresh

    im[curim

    xs = np.append(xs, curcen[0] + currad * np.cos(fis))

    ys = np.append(ys, curcen[1] + currad * np.sin(fis))

    plt.imshow(im.T, cmap=cmap, extent=xr+yr)

    plt.plot(xs, ys, 'r-')

    这是你跑步时得到的

    gauplot([(0,0), (2,3), (5,1), (6, 7), (6.1, 6.1)], [.3,. 4, .5, 1, .4], [-1,10], [-1,10])

    # centers of circles # radii of circles#

    展开全文
  • matplotlib 柱状图之渐变色设置

    千次阅读 2019-09-30 12:05:19
    matplotlib 柱状图之渐变色设置 matplotlib中,在用bar或者barh绘制柱状图时,发现加入cmap是不管用的,不支持这个关键字,而且网上找了许久,也没有发现有类似功能,因此,干脆自己写一个试试,说来就来!! ...
  • 热力图是数据分析的常用方法,通过色差、亮度来展示...需求:(1)各个特征柱形条,按热力图规则采用渐变颜色,例如样图中采用’inferno’色带;(2)由于渐变的原因,会出现接近背景的颜色,需要给柱形条加外边框;(3...
  • 哈哈哈,重点来了,我们将这个矩阵显示出来平滑一下看看什么效果: import matplotlib.pyplot as plt import numpy as np a = np.array([[1, 2], [2, 1]]) # plt.imshow(a) plt.imshow(a, interpolation='bicubic') ...
  • 你解决过这个问题吗?我想要同样的东西,并用here的坐标映射找到了答案#Map axis to coordinate systemdef maptodatacoords(ax, dat_coord):tr1 = ax.transData.transform(dat_coord)#create an inverse ...
  • 由于您尝试模拟现有渐变而不是从任意颜色创建渐变,因此只需找到一个与测量的渐变值匹配的公式。在首先取梯度上每个点的平均像素r,g,b值。你需要先得到一个纯图像,你发布的图像有一个白色的边框,边缘有一些响声...
  • 算了,自问自答一下,用matplotlib.colors里面的LinearSegmentedColormap类可以自定义color_map。代码:import numpy as npimport matplotlib.pyplot as pltfrom matplotlib.colors import LinearSegmentedColormap#...
  • 如果感觉到这样显示有些单调,想创新一下,比如让中间填充的颜色改为渐变颜色显示,如下图这样显示: 在前面显示的条形图,如果很多人已经审美疲劳,换成渐变的条形图显示,就会发现有耳目一新的感觉。要是在客户...
  • 如何在条形图中添加渐变...这是一些示例代码:import numpy as npimport matplotlib.pyplot as pltplt.figure(figsize=(1,5))plt.axis([0,1,-50,200])plt.xticks([])plt.yticks([-40,180])plt.bar(left=0, width=...
  • import numpy as npimport matplotlib.pyplot as pltimport matplotlib.collections as mcolldef multicolored_lines():""...
  • Matplotlib:给子图添加colorbar(颜色条或渐变色条)
  • 我想将MATLAB中的surf命令转换为matplotlib中的plot_surface命令.我正面临的挑战是在plot_surface命令中使用cmap函数来使用渐变来绘制曲面.这是matlab脚本% Matlab Commandsx = -5:.25:5; y = x[x,y] = meshgrid(x);...
  • 在只要所有的线条共享相同的颜色贴图,就可以将它们组合到一个单独的线条集合中,并且每个线条仍然可以有一个独立的渐变。在在这件事上Matlib还是很慢的。它是优化的质量输出,而不是快速绘制时间。不过,你可以把...
  • 1. 类RadioButtons的使用方法类似单选框import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mplfrom matplotlib.widgets import RadioButtonsmpl.use("Qt5Agg")x = np.linspace(0.0, 2.0, 1000...
  • colset = self._shade_colors(color, normals)虽然理论上一个平面的法线都是相同的,但实际上由于浮点运算。这些微小的变化被放大了normalization因为这个{a3}位于0和1之间。在因此,所有完全平面的曲面都容易出现...

空空如也

空空如也

1 2 3 4 5 6
收藏数 120
精华内容 48
关键字:

matplotlib渐变