【问题标题】:how to plot a heat map for three column data如何绘制三列数据的热图
【发布时间】:2013-08-12 15:26:35
【问题描述】:

我有三列文件,500 万行。就像

x,y,z
3,4,6.7
9,4,7.8

X 和 y 是像素数,z 是 (x,y) 处的对应值
如何绘制热图?
2D 情节是对我最初想法的妥协。
你可以查看我的原帖 How to use griddata from scipy.interpolate

我尝试了下面的方法,但它只是一个散点图。

import numpy as np
import pylab as pl
x,y,z =np.loadtxt('3columns.csv',delimiter=',',usecols=(0,1,2),unpack=True)

pl.scatter(x, y, c=z)

pl.show()

【问题讨论】:

  • 是否有重复项? .csv 中是否表示所有可能的坐标或是否有未定义的像素?
  • 您想要某种 3D 曲面图而不是 2D 散点图吗?如果有,你看过matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 吗?
  • 由于管道的原因有很多重复。许多像素值是相同的,但所有像素都已定义...我已经检查了该链接。我更喜欢应该使用网格数据的 3d 曲面图。数据有点不规则,所以也许应该先建立一个网格。

标签: matplotlib


【解决方案1】:

我也遇到过类似的问题。我所做的是设置一个数组Z[row[0]][row[1]] = row[2]

import numpy as np
x,y,z =np.loadtxt('3columns.csv',delimiter=',',usecols=(0,1,2),unpack=True)
nx = x.max() - x.min() + 1
ny = y.max() - y.min() + 1
Z = np.zeros((nx,ny)) 

assert x.shape == y.shape == z.shape
for i in range(len(x)):
    Z[x[i]-x.min()][y[i]-y.min()] = z[i] 

import matplotlib.pyplot as plt 
fig = plt.figure()
figure_name = 'figure_name'
plt.pcolor(np.arange(nx),np.arange(ny),Z,cmap=plt.cm.Reds)
plt.colorbar()
plt.xlim(0,x.max()-x.min())
plt.ylim(0,y.max()-y.min())

xlabels = np.arange(x.min(),x.max(),Nspacingx) # define Nspacing accordingly 
ylabels = np.arange(y.min(),y.max(),Nspacingy) 
plt.xticks(np.arange(0,x.max()-x.min(),Nspacingx),xlabels)
plt.yticks(np.arange(0,y.max()-y.min(),Nspacingy),ylabels)

plt.savefig(figure_name,dpi=400)

通过这种方式,您可以从 3 列数据文件中绘制 2D 热图。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-27
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    • 2019-10-17
    • 2016-02-29
    相关资源
    最近更新 更多