在matplotlib中创建热图图

在matplotlib中创建热图图,matplotlib,jupyter-notebook,Matplotlib,Jupyter Notebook,我有一个二维numpy数组,它是一组值​​对于某些参数。此数组中的部分数据丢失,其类型为numpy.nan。 我想用热图、pcolor或matshow或imshow绘制一个“热图”类型的图表,在这种情况下,这对我来说并不重要。颜色将指示参数的值。 但我面临一些困难,使这项任务成为一项耗时的工作。数组中部分数据的传递是由于显示热图的数据字段不是矩形。它被刻在一个近似圆形的图形上。我给NaN赋值​​数据矩阵中不属于圆的点。在该矩阵中,nan值具有传统上不是圆的点。只有一些列和行完全被数据填充。这种方

我有一个二维numpy数组,它是一组值​​对于某些参数。此数组中的部分数据丢失,其类型为numpy.nan。 我想用热图、pcolor或matshow或imshow绘制一个“热图”类型的图表,在这种情况下,这对我来说并不重要。颜色将指示参数的值。 但我面临一些困难,使这项任务成为一项耗时的工作。数组中部分数据的传递是由于显示热图的数据字段不是矩形。它被刻在一个近似圆形的图形上。我给NaN赋值​​数据矩阵中不属于圆的点。在该矩阵中,nan值具有传统上不是圆的点。只有一些列和行完全被数据填充。这种方法帮助我解决了如何显示任意形状的热图而不仅仅是矩形的问题

在这方面,我有两个问题:

  • 当用我的方法解决问题时,什么热图设置可以设置nan值的颜色,因为白色并不总是我想要的。我希望能够设置我的选择
  • 一个更具全球性的问题。有没有更简单的方法来绘制热图,我可以简单地指定数据点的x和y坐标,以及将转换为颜色的参数值(例如z)。我不想创建一个包含部分缺失数据的二维数组,只想通过像对象x、y和z这样的数组,得到这样的热图。但是我想让这个图看起来像一个长方形瓷砖的立体场,如我的图片所示,而不是像一些散点图,带有多色标记点。 在我的例子中,创建图形的代码如下所示:
  • 将numpy导入为np
    作为pd进口熊猫
    将matplotlib导入为mpl
    将matplotlib.pyplot作为plt导入
    导入日期时间
    %matplotlib内联
    #正在检索和转换数据。。。
    #创建二维数据数组
    #创建矩阵数据向量-一些自定义函数
    数据=创建矩阵数据向量(参数数据=数据.z参数\
    位置数据=位置数据正常\
    数据形状=数据形状(数组形状)
    数据形状
    
    (12,12)-大小可以大得多
    
    数据数组如下所示:

    数组([[nan,nan,nan,201,195,203,196,nan,
    楠,楠,楠],,
    [nan,nan,nan,193,172,181,212,91.3179.],
    楠,楠,楠],,
    [nan,nan,188,208,180,201,239,243,254,,
    253,楠,楠],
    [nan,232,234,224,266,263,258,218,215.],
    200,192,nan],
    [nan,211,201,194,190,199,196,187,200.],
    199,192,nan],
    [nan,200,202,207,201,195,203,196,193,,
    172,181,nan],
    [nan,212,91.3179,188,208,180,201,239.],
    243,254,nan],
    [nan,253,232,234,224,266,263,258,218.],
    215,200,nan],
    [nan,192,211,201,194,190,199,196,187,,
    200,199,nan],
    [nan,nan,192,200,202,207,201,195,203,,
    196,楠,楠],
    [nan,nan,nan,193,172,181,212,91.3179.],
    楠,楠,楠],,
    [nan,nan,nan,nan,188,nan,nan,208,nan,
    楠,楠,楠]]
    
    此代码用于绘制图形:

    bounds=np.linspace(param_ng,param_vg,continious_color_map.N)\
    .重塑(连续的颜色映射N)
    norm=mpl.colors.BoundaryNorm(边界,连续的颜色映射)
    图,ax=plt.子批次(1,1,figsize=(7,7))
    img=ax.matshow(数据,cmap=continious\u color\u map,norm=norm)
    分隔器=使轴可定位(ax)
    cax=分隔器。附加_轴(“右”,大小为5%,填充为1%)
    图颜色条(img,cax=cax,ax=ax,ticks=bounds)
    

    如果您能提供任何帮助,我将不胜感激。

    您可以通过
    设置
    nan
    值的颜色。将\u bad()
    设置到颜色映射

    要从未固定的x、y、z位置创建图像,可以使用
    contourf()

    导入matplotlib.pyplot作为plt
    将matplotlib导入为mpl
    将numpy作为np导入
    来自numpy INPORT nan
    数据=np.数组([[nan,nan,nan,nan,201,195,203,196,nan,nan,nan,nan],
    [nan,nan,nan,193,172,181,212,91.3179,nan,nan,nan],
    [nan,nan,188,208,180,201,239,243,254,253,nan,nan],
    [nan,232,234,224,266,263,258,218,215,200,192,nan],
    [nan,211,201,194,190,199,196,187,200,199,192,nan],
    [nan,200,202,207,201,195,203,196,193,172,181,nan],
    [nan,212,91.3179,188,208,180,201,239,243,254,nan],
    [nan,253,232,234,224,266,263,258,218,215,200,nan],
    [nan,192,211,201,194,190,199,196,187,200,199,nan],
    [nan,nan,192,200,202,207,201,195,203,196,nan,nan],
    [nan,nan,nan,193,172,181,212,91.3179,nan,nan,nan],
    [nan,nan,nan,nan,188,nan,nan,208,nan,nan,nan,nan]]
    连续颜色映射=plt.get\u cmap('spectrum',20)
    连续的颜色映射。设置为坏(“紫色”)
    bounds=np.linspace(np.nanmin(数据),np.nanmax(数据),continious\u color\u map.N)
    norm=mpl.colors.BoundaryNorm(边界,连续的颜色映射)
    图(ax1,ax2)=plt.子批次(ncols=2,figsize=(14,6))
    img1=ax1.matshow(数据,cmap=continious\u color\u map,norm=norm)
    plt.色条(img1,ax=ax1,收缩=0.9)
    xs=[i表示枚举(行)中i的数据行,x表示非np.isnan(x)