мне удалось довольно хорошо пример блоков ширины переменной прошлой ночью. Я собирал данные гистограммы задержки, полученные в тестовом пакете производительности хранилища FIO. С моей опции компиляции У меня есть 1856 бункеров, которые идут следующим образом:
Мои значения задержки во время графика находятся в микросекундах (FIO обеспечивает наносекунды, но мне нужны микросекунды по историческим причинам). У меня не было возможности включить ширину бункера в мои данные. Так что я сделал это:
- е (х) = (2 ** (интермедиат (журнал (х * 1000)/журнал (2)) - 6))/1100
- участок "Темп" у 1 : 2: (е (колонка (1))) с коробками фс прозрачной твердым телом 0.7 Названия noborder «$ легенды» $ base_plot
Диафрагменного (х) определение возвращает ширину окна для заданной задержки - она работает как следует:
- Во-первых, x * 1000 возвращает меня к наносекундам.
- log (x * 1000)/log (2) принимает логарифм базы 2 наномсекундного счета.
- int() просто дает мне целую часть этого. Обратите внимание, что теперь, скажем, 128 нс, у меня было бы 7.
- -6 достает меня в базу 2 журнала ширины бункера.
- 2 ** возвращает меня к ширине бункера.
- /1000 возвращает меня от наносекунд до микросекунд.
Тогда я просто использую f (латентность) в команде plot в качестве ширины окна.
Это работает - кажется, работает отлично, насколько я могу судить. Это не дало бы правильного результата для x < 64 нс, но у меня нет данных, которые малы, так что это получается. Для его исправления для этой части диапазона можно использовать условное выражение.
Я думаю, что основные наблюдения здесь состоят в том, что: a) вам не нужно иметь ширину в виде литеральных данных - если вы можете рассчитать ее из данных, которые у вас есть, вы золотые, а b) столбец (n) является альтернативой $ n как способ выражения значений столбца в команде plot. В моем случае у меня есть все это в сценарии bash, и bash перехватил $ 1.