【问题标题】:Generating a frequency heatmap in Python MatPlotLib reading in X and Y coordinates from a .csv file在 Python MatPlotLib 中生成频率热图,从 .csv 文件读取 X 和 Y 坐标
【发布时间】:2011-08-17 22:41:45
【问题描述】:

我最近偶然发现了一个关于 how to generate a heatmap of frequencies in Python using the MatPlotLib module 的类似问题。

这篇文章非常有用,我可以让各个脚本运行并为代码固有地生成的随机测试数据创建热图。但是,我无法调整代码来为我正在使用的数据创建热图。数据采用逗号分隔格式 (.csv)。

我目前在这个 .csv 文件中保存了 3788 对平均质量评级。这些平均质量评级的范围都是 0 - 5。我正在尝试创建一个热图,在 x 和 y 轴(0-.499、.5-.999、1-1.499等等)。

我想将 .csv 文件的第一列 (webqualityratings) 导入为热图的 x 值,并将 .csv 文件的第二列 (inpersonqualityratings) 导入为热图的 y 值。

我试图改编由“ptomato”发布并由 Mike Graham 编辑的代码如下:

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

# Generate some test data  
x = np.random.randn(8873)  
y = np.random.randn(8873)  

heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)  
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]  
plt.clf()  
plt.imshow(heatmap, extent=extent)  
plt.show() 

如果有人可以帮助我调整此代码以按照指定从我的 .csv 文件中读取数据,我将永远感激不尽!

【问题讨论】:

    标签: python csv matplotlib


    【解决方案1】:

    Python 有一个绝对壮观的 csv 文件库:

    http://docs.python.org/library/csv.html

    虽然我不知道 matplotlib 的详细信息,但以下代码将遍历一个制表符分隔的 csv 文件,并在第一列和第二列中执行您的代码。

    import numpy as np
    import numpy.random
    import matplotlib.pyplot as plt
    import csv
    
    with open(yourInputFile, "rb") as mycsv:
        reader = csv.DictReader(mycsv, dialect='excel-tab')
    
        for row in reader:
            x = row['name of first column']
            y = row['name of second column']
            heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)
            extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]
            plt.clf()
            plt.imshow(heatmap, extent=extent)
    
    plt.show()
    

    请注意,我使用的是 DictReader 变体,它需要一个标头才能工作。在文件的开头,或者作为构造函数的输入。您也可以使用常规阅读器,但它使用列号而不是名称,这在 100 多个字段中很笨拙。

    如果需要,您可以更改特定 csv 文件的方言,甚至创建自己的方言。

    最后请注意,我对matplotlib一无所知,那段代码很可能是错误的。

    【讨论】:

      【解决方案2】:

      由于您有 numpy 供您使用,并且假设您的 csv 文件表现良好,您可以使用 numpy.loadtxt(),

      import numpy as np   
      import matplotlib.pyplot as plt  
      
      dat = np.loadtxt('mydata.csv')
      
      x, y = dat[:,0], dat[:,1]
      
      heatmap, xedges, yedges = np.histogram2d(x, y, bins=50)  
      extent = [xedges[0], xedges[-1], yedges[0], yedges[-1]]  
      plt.clf()  
      plt.imshow(heatmap, extent=extent)  
      plt.show() 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-13
        • 1970-01-01
        • 2020-07-28
        • 2014-02-26
        • 1970-01-01
        • 2020-09-22
        • 2017-07-08
        相关资源
        最近更新 更多