ENH use more precise format function

This commit is contained in:
Nathan Dwarshuis 2021-07-18 19:18:14 -04:00
parent 3953b97964
commit 3ae2c7cb1c
5 changed files with 46 additions and 17 deletions

2
core

@ -1 +1 @@
Subproject commit 760beffe2710d863e2e18063fff50556fa1c054c Subproject commit 1f4d9a574c8887e084bb1acbde3dc99392da084c

View File

@ -134,7 +134,7 @@ M.default_plot_style = Startup.plot_style(
M.percent_label_style = Startup.label_style( M.percent_label_style = Startup.label_style(
Theme.INACTIVE_TEXT_FG, Theme.INACTIVE_TEXT_FG,
M.label_font_spec, M.label_font_spec,
function(z) return Util.round_to_string(z * 100)..'%' end function(_) return function(z) return Util.round_to_string(z * 100)..'%' end end
) )
M.initThemedLabelPlot = function(x, y, w, h, label_style, update_freq) M.initThemedLabelPlot = function(x, y, w, h, label_style, update_freq)
@ -200,6 +200,34 @@ end
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- scaled plot -- scaled plot
-- Generate a format string for labels on y axis of plots. If the max of the
-- plot if numerically less than the number of grid lines, this means that
-- some number of decimal places are necessary to accurately display the number.
-- Note that this for now only works when the number of y grid lines if 4, as
-- it gives enough resolution for 1, 0.75, 0.5, and 0.25 but no more
M.y_label_format_string = function(plot_max, unit)
local num_fmt
if plot_max < 2 then
num_fmt = '%.2f'
elseif plot_max < 4 then
num_fmt = '%.1f'
else
num_fmt = '%.0f'
end
return string.format('%s %s', num_fmt, unit)
end
M.converted_y_label_format_generator = function(unit)
return function(plot_max)
local new_prefix, new_max = Util.convert_data_val(plot_max)
local conversion_factor = plot_max / new_max
local fmt = M.y_label_format_string(new_max, new_prefix..unit..'/s')
return function(bytes)
return string.format(fmt, bytes / conversion_factor)
end
end
end
M.base_2_scale_data = function(m) M.base_2_scale_data = function(m)
return Startup.scale_data(2, m, 0.9) return Startup.scale_data(2, m, 0.9)
end end

View File

@ -5,10 +5,9 @@ local Geometry = require 'Geometry'
return function(update_freq) return function(update_freq)
local PLOT_SEC_BREAK = 20 local PLOT_SEC_BREAK = 20
local PLOT_HEIGHT = 56 local PLOT_HEIGHT = 56
-- TODO ensure these interfaces actually exist
local INTERFACES = {'enp7s0f1', 'wlp0s20f3'} local INTERFACES = {'enp7s0f1', 'wlp0s20f3'}
local __math_floor = math.floor
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- header -- header
@ -22,11 +21,6 @@ return function(update_freq)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- download plot -- download plot
local network_label_function = function(bits)
local new_unit, new_value = Util.convert_data_val(bits)
return __math_floor(new_value)..' '..new_unit..'b/s'
end
local value_format_function = function(bits) local value_format_function = function(bits)
local unit, value = Util.convert_data_val(bits) local unit, value = Util.convert_data_val(bits)
return Util.precision_round_to_string(value, 3)..' '..unit..'b/s' return Util.precision_round_to_string(value, 3)..' '..unit..'b/s'
@ -39,7 +33,7 @@ return function(update_freq)
Geometry.SECTION_WIDTH, Geometry.SECTION_WIDTH,
PLOT_HEIGHT, PLOT_HEIGHT,
value_format_function, value_format_function,
network_label_function, Common.converted_y_label_format_generator('b'),
PLOT_SEC_BREAK, PLOT_SEC_BREAK,
label, label,
2, 2,

View File

@ -23,10 +23,13 @@ return function(update_freq)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- package 0 power plot -- package 0 power plot
local power_label_function = function(watts) return watts..' W' end local power_label_function = function(plot_max)
local fmt = Common.y_label_format_string(plot_max, 'W')
return function(watts) return string.format(fmt, watts) end
end
local power_format_function = function(watts) local power_format_function = function(watts)
return Util.precision_round_to_string(watts, 3).." W" return Util.precision_round_to_string(watts, 3)..' W'
end end
local build_plot = function(y, label, format_fun) local build_plot = function(y, label, format_fun)

View File

@ -31,10 +31,14 @@ return function(update_freq)
----------------------------------------------------------------------------- -----------------------------------------------------------------------------
-- reads -- reads
local io_label_function = function(bytes) -- local io_label_format_fun_generator = function(plot_max)
local new_unit, new_value = Util.convert_data_val(bytes) -- local new_unit, new_max = Util.convert_data_val(plot_max)
return __math_floor(new_value)..' '..new_unit..'B/s' -- local conversion_factor = plot_max / new_max
end -- local fmt = Common.y_label_format_string(new_max, new_unit..'B/s')
-- return function(bytes)
-- return string.format(fmt, bytes / conversion_factor)
-- end
-- end
local format_value_function = function(bps) local format_value_function = function(bps)
local unit, value = Util.convert_data_val(bps) local unit, value = Util.convert_data_val(bps)
@ -48,7 +52,7 @@ return function(update_freq)
Geometry.SECTION_WIDTH, Geometry.SECTION_WIDTH,
PLOT_HEIGHT, PLOT_HEIGHT,
format_value_function, format_value_function,
io_label_function, Common.converted_y_label_format_generator('B'),
PLOT_SEC_BREAK, PLOT_SEC_BREAK,
label, label,
2, 2,