python - 在 matplotlib 中组合多个热图

标签 python 3d matplotlib heatmap

我目前面临可视化三维数据的问题。具体来说,我有两个变化的参数,第三个维度是结果输出,在这种情况下是一个介于零和一(百分比)之间的值。

我想说明几个不同的数据集。在 matplotlib (pcolor) 中使用热图效果很好。

但是,我想直接比较不同的数据集。我不太乐意为每个数据集生成一个单独的图并以这种方式表示它。我想以某种方式将其绘制在一张图中以便能够直接比较它们。

我尝试过 3D 图(散点图和曲面图),效果相当不错,但值重叠,大多数时候您只能看到一个数据集。 3D 绘图确实效果不佳。

所以我的主要问题是,是否有人知道我如何在一个情节中表示这一点。

问候!

最佳答案

虽然这是一个老问题,但我最近做了一些相关的事情:在同一个图中绘制两个热图。我通过将正方形转换为散点图来做到这一点,其中我将正方形转换为两个三角形。

我使用自定义标记制作了两个三角形:

 import matplotlib
 import matplotlib.pyplot as plt
 import numpy as np

 def getCustomSymbol1(path_index=1):
  if path_index==1:  #upper triangle
      verts = [
      (0.0,0.0),
      (1.0,0.0),
      (1.0,1.0),
      (0.0,0.0),]
  else:              #lower triangle
      verts = [
      (0.0,0.0),
      (0.0,1.0),
      (1.0,1.0),
      (0.0,0.0),]
  codes = [matplotlib.path.Path.MOVETO,
           matplotlib.path.Path.LINETO,
           matplotlib.path.Path.LINETO,
           matplotlib.path.Path.CLOSEPOLY,
           ] 
  pathCS1 = matplotlib.path.Path(verts, codes)
  return pathCS1, verts

 def plot_mat(matrix=np.random.rand(20,20), path_index=1, alpha=1.0, vmin=0., vmax=1.):
    nx,ny = matrix.shape
    X,Y,values = zip(*[ (i,j,matrix[i,j]) for i in range(nx) for j in range(ny) ] )
    marker,verts = getCustomSymbol1(path_index=path_index)
    ax.scatter(X,Y,s=4000, 
               marker=marker, 
               c=values, 
               cmap='viridis', 
               alpha=alpha, 
               vmin=vmin, vmax=vmax )
    return

 fig = plt.figure()
 ax = fig.add_subplot(111)
 A  = np.random.uniform(20,50,30).reshape([6,5])
 B  = np.random.uniform(40,70,30).reshape([6,5])
 vmin = np.min([A,B])
 vmax = np.max([A,B])
 plot_mat(path_index=1,vmin=vmin,vmax=vmax,matrix=A)
 plot_mat(path_index=2,vmin=vmin,vmax=vmax,matrix=B)
 plt.xlim([0,6])
 plt.ylim([0,5])
 # for the colorbar i did the trick to make first a fake mappable:
 sm = plt.cm.ScalarMappable(cmap='viridis', norm=plt.Normalize(vmin=vmin, vmax=vmax ) )
 sm._A=[]
 plt.colorbar(sm)
 plt.show()

一起可以给你这样的东西: enter image description here

关于python - 在 matplotlib 中组合多个热图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17809274/

相关文章:

python - 安装Matplotlib : Command "python setup.py egg_info" failed with error code 1 (proposed solutions did not work)

Python ctypes 和可变性

python - 为什么使用 lambda 函数将其设为属性?

javascript - JavaScript 或 Python 中的隐藏线删除?

python-2.7 - Python——用于椭圆曲线的 Matplotlib 与 sympy solve()

python - 在 Python 中监控进程?

java - 使用 JavaFX8 3D 将两个球体与一个圆柱体连接起来

tensorflow - 如何使用 tensorflow 旋转 3D 图像?

python - 如何从 3D 不规则数据中切片 2D 网格?

python - matplotlib 图缩放 : ticklabels don't get updated (Python)