python - 带分隔条的直方图
问题描述
我有作为时间函数的通量文件。现在我需要制作所有通量的直方图,并且我需要在每个条形图中输入有关给定 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}]
解决方案
好的,我做到了!也许这个方法并不漂亮,但也许它对你们中的一些人将来会有所帮助。
我的脚本:
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 中附上了一张图片。
推荐阅读
- python - 需要在用户输入列表中查找最小值、最大值、范围和平均值,但我无法使用内置函数来查找它们
- database - 可以构建直接连接到数据库的前端吗?
- python - python: 3.9.0版本中的.py文件图标问题
- java - Spring Batch with Hiberbate,刷新后实体不持久
- gnuplot - gnuplot how to print out derivative value to txt file?
- c++ - 如何根据排名实现 BST 函数 insert() 和 split()?
- android - 如何限制搜索建议的数量kotlin
- c - 如何从标准输入中指定文件名然后读取同一个文件?
- javascript - 从“lodash/fp”导入 { pipe } 给出“ERR_UNSUPPORTED_DIR_IMPORT”错误
- python - 使用 Pandas 在其他 2 个数据框中查找重复元素和唯一元素?