Визуализация файла на основе байтовых диапазонов в python - PullRequest
0 голосов
/ 12 июля 2020

У меня есть данные, описывающие структуру двоичного файла. Каждая точка данных указывает начальный и конечный диапазон в байтах, а также тип:

[0x046270, 0x057574, "type1"]
[0x057574, 0x05BF20, "type2"]
[0x05BF20, 0x05EF80, "type1"]
[0x05EF80, 0x05F050, "type2"]

Я хотел бы иметь возможность визуализировать файл, раскрашивая разделы и получая что-то похожее на то, что можно увидеть в старая Windows утилита дефрагментации диска.

Windows Дефрагментатор диска

Я пробовал использовать для этого гистограмму с накоплением в matplotlib, но вижу некоторые проблемы и думаю, что могу использовать ее для этой цели неправильно. Есть ли название для типа графика ниже или какой-нибудь простой способ его визуализации?

1 Ответ

1 голос
/ 12 июля 2020

Basi c сложенный граф с 256 секторами изображений. Чтобы сделать его двухуровневым, как на представленном изображении, вам нужно добавить ax2 или изменить структуру данных. Это очень сложный процесс, поэтому для вывода требуется некоторое время.

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import random
FAT_No = np.arange(0, pow(2,8))
sector_st = random.choices(['type1','type2','type3','type4'], k=256)
value = [1]*256
before = ['before']*256
df = pd.DataFrame({'before':before,'fat_no':FAT_No, 'sector':sector_st, 'value':value})

df
    before  fat_no  sector  value
0   before  0   type1   1
1   before  1   type1   1
2   before  2   type4   1
3   before  3   type2   1
4   before  4   type2   1
... ... ... ... ...
251 before  251 type2   1
252 before  252 type2   1
253 before  253 type3   1
254 before  254 type2   1
255 before  255 type4   1

fig = plt.figure(figsize=(16,3),dpi=144)
ax = fig.add_subplot(111)

color = {'type1':'b','type2':'g','type3':'r','type4':'w'}

for i in range(len(df)):
    ax.barh(df['before'], df['value'].iloc[i], color=color[df['sector'].iloc[i]], left=df['value'].iloc[:i].sum())

plt.show()

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

...