Skip to content

Height cannot be exactly configured #26

Open
@neighthan

Description

@neighthan

Though there is a height parameter for the plotting function, this only roughly controls the height. It would be nicer to be able to exactly set the height. This is even more of an issue because the height isn't always off of the requested height by the same value, so it's not trivial to correct for this. Here are a couple of examples:

Requested height: 9; actual height: 10

$ pplot 1 10 --height 9
   10.00  ┤╭ 
    9.00  ┤│ 
    8.00  ┤│ 
    7.00  ┤│ 
    6.00  ┤│ 
    5.00  ┤│ 
    4.00  ┤│ 
    3.00  ┤│ 
    2.00  ┤│ 
    1.00  ┼╯ 

Requested height: 8; actual height: 10

$ pplot 1 10 --height 8
   10.00  ┼╭ 
    9.00  ┤│ 
    8.00  ┤│ 
    7.00  ┤│ 
    6.00  ┤│ 
    5.00  ┤│ 
    4.00  ┤│ 
    3.00  ┤│ 
    2.00  ┤╯ 
    1.00  ┼  

The issue is with the floor and ceil operators that are used in computing the actual number of rows.

Here's a quick fix for this in the Python version:

    target_height = cfg['height'] if 'height' in cfg else interval
    actual_height = float("inf")

    i = 0
    while actual_height > target_height:
        ratio = (target_height - i) / interval
        min2 = floor(minimum * ratio)
        max2 = ceil(maximum * ratio)
        actual_height = max2 - min2 + 1
        i += 1

    assert actual_height == target_height

I just keep decreasing the height value used by 1 until the actual height matches the target height. This has always given me an actual height that's exactly the target height in the quick tests I've done, but there's probably a better way to do this. I also considered decreasing max2 or increasing min2 by 1 directly, but then we'd also need to set a new value for ratio, at least to keep the current behavior, and I'm not sure what the appropriate way to do that would be.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions