如何在matplotlib中制作热图?

时间:2014-09-16 02:23:04

标签: python matplotlib

[[ 0.09834044  0.05596437  0.08409548  0.01200539  0.05020909  0.05553221
   0.15732649  0.1705372   0.11046963  0.09910177  0.15449556  0.21226754
   0.13576098  0.2016396   0.17727435  0.1536272   0.19067327 -0.21381126
  -0.2876521  -0.6855868 ]
 [ 0.50199206  0.50393367  0.5068545   0.50819611  0.50898569  0.50882053
   0.50996339  0.51056341  0.51211042  0.51312654  0.51299576  0.51297555
   0.51485414  0.51529348  0.51537164  0.51642804  0.51767036  0.52046692
   0.52239931  0.52620384]
 [ 0.5366334   0.53374475  0.51116071  0.50105042  0.49343487  0.5074103
   0.49801061  0.49074439  0.490348    0.51273634  0.49330357  0.50341387
   0.51155462  0.5207458   0.50892857  0.5102416   0.49146534  0.4894958
   0.51825105  0.53006828]]

这是我的数据集,但是当我绘制热图时,我得到yaxis的轴标签从0到20 ......并且x标签为0到3.0。热图颜色条具有负值。

plt.pcolor(dat3.T)
plt.colorbar()
plt.show()

我也尝试过带有奇怪图形的plt.pcolor(dat3)。为什么数据在最终图中被插值?

2 个答案:

答案 0 :(得分:1)

您的数据范围从-0.7ish到+ 0.5ish:这就是colorbar具有负值的原因。您有三组数据在图中显示为 band ,其颜色与颜色条一致。

>>> dat3.shape
(3, 20)
>>> 

转置数据会将数据集绘制为彼此相邻的垂直列。

答案 1 :(得分:1)

“热图”对很多不同的人来说意味着很多不同的东西。 (例如,对我而言,这意味着某种核密度估计图。)

根据您的描述,听起来您可能有x,y,z数据,您想要制作x和y的散点图,用z着色。例如:

import matplotlib.pyplot as plt

data = [[ 0.09834044,  0.05596437,  0.08409548,  0.01200539,  0.05020909,
          0.05553221,  0.15732649,  0.1705372 ,  0.11046963,  0.09910177,
          0.15449556,  0.21226754,  0.13576098,  0.2016396 ,  0.17727435,
          0.1536272 ,  0.19067327, -0.21381126, -0.2876521 , -0.6855868 ],
        [ 0.50199206,  0.50393367,  0.5068545 ,  0.50819611,  0.50898569,
          0.50882053,  0.50996339,  0.51056341,  0.51211042,  0.51312654,
          0.51299576,  0.51297555,  0.51485414,  0.51529348,  0.51537164,
          0.51642804,  0.51767036,  0.52046692,  0.52239931,  0.52620384],
        [ 0.5366334 ,  0.53374475,  0.51116071,  0.50105042,  0.49343487,
          0.5074103 ,  0.49801061,  0.49074439,  0.490348  ,  0.51273634,
          0.49330357,  0.50341387,  0.51155462,  0.5207458 ,  0.50892857,
          0.5102416 ,  0.49146534,  0.4894958 ,  0.51825105,  0.53006828]]

x, y, z = data
plt.scatter(x, y, c=z, s=120) # s=120 implies a marker size of 12 points.
plt.colorbar()
plt.show()

enter image description here