Гистограмма с разделенными полосами - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть файл с потоками в зависимости от времени. Теперь мне нужно составить гистограмму всех потоков, а также мне нужно поместить в каждый столбец информацию о времени, когда произошла данная точка 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}]

1 Ответ

0 голосов
/ 09 мая 2018

Хорошо, я сделал это!Возможно, метод не очень приятный, но, тем не менее, возможно, он будет полезен для некоторых из вас в будущем.

Мой сценарий:

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 и т. д. [число / с]), d необходим не для подсчета того, сколько раз задан диапазон потока, а для того, чтобы поместить каждое повторение на ось Y с помощьюассоциированное время (цвет).Я вложил изображение в нижеприведенный список.

введите описание изображения здесь

...