首页 > 解决方案 > 带分隔条的直方图

问题描述

我有作为时间函数的通量文件。现在我需要制作所有通量的直方图,并且我需要在每个条形图中输入有关给定 N 点发生时间的信息。主要思想是将每个条分成 N 块(N 是给定通量值的重复次数),并且每个块应具有取决于时间的颜色(颜色条)。在 Mathematica(或 python)中可以轻松做到这一点吗?我Stacked Bar Chart在 Mathematica 中尝试过选项,但没有结果。如果您知道任何类似的问题已经解决,我将非常感谢您提供链接。下面是我在 Mathematica 中的部分代码,但此时我只能得到简单的直方图。

mydata=Import["MJD_Flux_HR.dat", {"Data"}];
time = mydata[[All, 1]];
Rate = mydata[[All, 2]];

Histogram[Log[Rate], 50, ChartElementFunction -> "FadingRectangle", ChartStyle -> Orange, GridLines -> {None, {2, 4, 6, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100}}, GridLinesStyle -> Directive[Orange, Dashed],  AxesLabel -> {log[Flux], N}]

标签: pythonhistogramwolfram-mathematica

解决方案


好的,我做到了!也许这个方法并不漂亮,但也许它对你们中的一些人将来会有所帮助。

我的脚本:

import csv
import numpy as np

mjd, mjd_b, rate, hr, Nb = [], [], [], [], []

data='MJD_Flux_HR_002_039.txt'
N=0
with open(data,'r') as csvfile:
    lines = csv.reader(csvfile, delimiter=' ')
    for row in lines:
       mjd.append(float(row[0]))
       rate.append(float(row[1]))
       hr.append(float(row[2]))
       N+=1 

for b in range(0,200):
   d=0
   for i in range(0,N):
       k=b+1
       if rate[i] > b and rate[i] < k:
           d=d+1
           with open('Hist_data.dat','ab') as f:
               np.savetxt(f, [[b, d,mjd[i]]],delimiter=" ", fmt=('%2.0d','% 3.0d','% 3.5f'))
           Nb.append(d)
           mjd_b.append(mjd[i])

   del Nb[:]
   del mjd_b[:]

结果我得到了可以绘制的文件。b 在这里是一个通量范围(在 0 和 1、1 和 2 等 [counts/s] 之间),d 不需要计算给定通量范围出现的次数,而是更多地用于将每次重复放置在 Y 轴上相关时间(颜色)。我在下面的 ling 中附上了一张图片。

在此处输入图像描述


推荐阅读