【问题标题】:Histogram with divided bars带分隔条的直方图
【发布时间】:2018-04-24 11:02:13
【问题描述】:

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

【问题讨论】:

  • 我认为没有简单的方法可以做到这一点。您将需要从图形基元构建图形。建议在mathematica.stackexchange.com上提问
  • 谢谢。我问过(mathematica.stackexchange.com/questions/172011/…),但直到现在我还没有得到任何明确的答案。不幸的是,我无法回复 Mathematica 网站上用户的任何评论,所以我决定尝试使用 python 来做,因为如果遇到任何麻烦,至少可以与您和其他用户进行交互。
  • 图形基元?你能画出一点点吗?因为我正在努力如何为每个计数范围(此处为“b”)创建一个包含有关计数 N[b] 信息的数组,并在其中放置有关时间的信息:time[b]=[...,... ,...,N] 。 append(time) 函数对我不起作用,因为对于循环中的每个新 b 我都需要新的时间数组。我不知道我是否可以声明类似 time[b]=append.(time[i]) 的东西?我已经尝试过了,但我得到了一个错误。如果有帮助,我可以发送我的脚本。
  • 如果其他网站上的答案都不能接受,那应该告诉你你没有很好地解释你想要什么。你是什​​么意思你不能回应?
  • 我的意思是当我点击'添加评论'时(我不明白一个响应,这一刻对我来说级别太高了),它告诉我“你必须有 50 声望才能评论”。是的,我知道其他人可能不清楚某些事情,但我不能询问该网站上的任何不准确之处(从我的角度来看,那里的描述似乎很清楚)。

标签: python histogram wolfram-mathematica


【解决方案1】:

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

我的脚本:

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 中附上了一张图片。

enter image description here

【讨论】:

    猜你喜欢
    • 2014-04-10
    • 2017-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2012-08-14
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多