python - 使用python以指定格式绘制大数据

标签 python matplotlib plot

我是 Python 新手,需要一些有关如何以以下格式绘制数据的帮助(请参见图片)

我将有一个像这样的文件格式:

# of IDs \t start_time \t end_time
   428      1404238888      1404314624
   132      1404259731      1404346488
    77      1404347808      1404437873 
    63      1404432707      1404520913
    281     1404518967      1404605334
   .......

根据评论中的建议,我找到了一种通过按开始和结束时间对 ID 进行聚类来减少数据的方法。我的新文件将采用上述格式,其中第一列表示该时间范围内(从开始到结束)有多少个 ID。 所以我想这种情况下更好的图形表示是做条形图。

我的 y 轴将是 ID 数,x 轴将是时间,单位为天(我的总测量时间约为 3 个月)

我想展示的是在什么时间范围内聚集的ID数量最多。 我想要实现的目标如下图所示,在文件的每一行中,我将绘制一个条形。

enter image description here

我希望上图能够很好地解释我想要实现的目标。如果能让我知道如何开始绘制图表并以我想要的单位设置 y 轴和 x 轴,那就太好了。抱歉,这是我第一次尝试用 Python 绘制图形。我还为我的项目编写了其他代码,但一直在编写代码来绘制最终结果。

预先感谢您的帮助

最佳答案

这真的非常简单。如果您深入研究 matplotlib 的示例部分,您应该不会遇到任何问题。 plt.bar(left_edge, height, width) 正是您想要的。

  1. 获取您需要的内容。

    import matplotlib.pyplot as plt
    import csv
    

    如果您的数据确实是制表符分隔的文件,它应该如下所示:(您的数据看起来更像是多个空格分隔的文件tbh)

    id  start   end
    428 1404238888  1404314624
    132 1404259731  1404346488
    77  1404347808  1404437873 
    63  1404432707  1404520913
    281 1404518967  1404605334
    
  2. 读入您拥有的数据。

    file = open("test.txt", "r")
    reader = csv.DictReader(file, delimiter="\t")
    
    ids = [] #open 3 new lists to hold your data
    start = []
    end = [] 
    for data in reader:
        ids.append(float(data["id"]))
        start.append(float(data["start"]))
        end.append(float(data["end"])-float(data["start"])) #remember: it's "width" not "right edge coordinate"
    
  3. 这是实际的绘图。

    fig, ax = plt.subplots()
    w = sum(end)/len(end)/10 #change the width of the bar
    for i in range(len(ids)):
        ax.bar(start[i], ids[i], width=end[i])
    
    plt.show()
    

由于在您的问题中您说重要的是条形的右边缘以第二个坐标结束,因此最好使用 end[i] 进行绘制。然而,正如我在图表中所示,您存在一些重叠问题。 IE。第一个以 ....314... 结束,而第二个以 ....259... 开始,而且不止这个。

你本质上问的问题清楚地表明这是错误的:“我想将文件中的每一行都变成一个条形,并且我已经堆叠了 y 轴高度。x 轴是日期。”但显然你做得不对,因为这样的直方图中不应该有重叠,如果有重叠,则意味着重叠应该添加到之前的 bin 高度中。

我不久前回答过一个类似的问题,关于如何在 matplotlib 中正确处理和堆叠日期,reading it可能会帮助你。它是在模拟日期时间对象列表上完成的。您的看起来像是已经使用 date2num 进行了转换,但适用相同的原则(建议您使用 hist 函数并让它处理日期。)

结果(python 3、win7、matplotlib 1.3.1):

enter image description here

关于python - 使用python以指定格式绘制大数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28789146/

相关文章:

python - 上传到pypi,然后用pip下载

python - 导入错误: cannot import name 'unicode_csv_reader' from 'torchtext.utils'

matlab - 具有 2 个变量的函数曲线下的阴影面积

python - 在条形图中使用色调时,让 seaborn 显示颜色条而不是图例?

r - ggplot 上的混合刻度

r - 如何通过节点或叶子中的标签折叠系统发育树中的分支?

python - 如何在 tkinter 中使用文件对话框获取文件名?

python + dataframe + 基于 bool 值对单行中的项目进行计数

python - 如何平滑python中图形中的线条?

python - tkinter.TclError : couldn't connect to display "localhost:18.0"