Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

using plotille for a real time chart #57

Open
xmnlab opened this issue Feb 4, 2024 · 9 comments
Open

using plotille for a real time chart #57

xmnlab opened this issue Feb 4, 2024 · 9 comments

Comments

@xmnlab
Copy link

xmnlab commented Feb 4, 2024

Hey everyone!

first of all, thank you all for working on plotille, that is a very nice library!

I am trying to have a real time chart, but I am having some hard time trying to figure out how to have the time in the x axis.

This is my initial code: https://github.com/osl-incubator/sugar/blob/main/src/sugar/plugins/stats.py#L94

but now I am trying to have the x axis with the time. and it seems it is not working properly.
as I saw in the source code it uses some math to calculate the ticks, so maybe it is breaking my code.

locally, in a wip, I tried x_ticks_fkt and register_label_formatter .. but it seems it is not working as I expected.

could you point me to any example that uses x axis for time? that I could use it for a real time chart?

another extra question, still about real time chart, do I need to create the figure for every iteration?
because if I use plot every time, it add more lines to the chart. so for now I am recreating the chart figure every time, but it would be nice to just update the data there.

thanks!

@xmnlab
Copy link
Author

xmnlab commented Feb 4, 2024

btw, I managed to workaround that with:

self.fig_mem._plots.clear()
self.fig_cpu._plots.clear()

but the color of the lines change every iteration

@xmnlab
Copy link
Author

xmnlab commented Feb 4, 2024

I also changed to X axis to datetime.datetime.now(), and it seems it is working .. I will investiate a bit more about that.

@xmnlab
Copy link
Author

xmnlab commented Feb 4, 2024

I created a copy of _color_seq with tee in order to handle keep the same color always.

but if there is a better way to handle that .. I will appreciate a better approach.
thanks!

@tammoippen
Copy link
Owner

Hi @xmnlab ,

Thank you for the kind words!

Here is an example for custom ticks: https://github.com/tammoippen/plotille/blob/master/examples/custom_ticks_example.py

The function signature is def default_tick(min_, max_): where min_ and max_ both have the type of the x- or y-axis data (e.g. datetime). They are the minimum and maximum value of the current tick. The return value will be rendered as the tick value - if there is a formatter for the value, it will be formatted. If the return value is a str, the string will be rendered.

Here are tests that use datetime on the x-axis: https://github.com/tammoippen/plotille/blob/master/tests/test_figure.py#L494-L572

When you want time on the x-axis, you have to use date, datetime or numpy.datetime, or write your own converter / formatter. See here for the default converters / formatters of date(time)s. The delta is the difference between the smallest and largest x-value, hence the formatting can be 'refined' depending on how large the difference is (you only have a certain amount of characters per tick to write the tick-value).

Regarding colors, you can either:

  • create a new figure every time - the color order for the plots is the same.

  • set the color explicitly:

    self.fig_mem.plot(
            container_stats['times'],
            container_stats['mem_usages'],
            label=name,
            lc="red",  # <===
    )

The parameter lc means line color and can be either color names, color codes or rgb values.

Please read this docstring for the color formatting in the terminal. To change the color mode of a figure, use this getter/setter. BTW, you can also set a background color: https://github.com/tammoippen/plotille/blob/master/plotille/_figure.py#L472 .

I hop, this helps you. I am looking forward to see how suger evolves :D.

Best, Tammo

@brablc
Copy link

brablc commented Jun 10, 2024

We might be doing similar thing. I try to visualize sar/sysstat data generally in https://github.com/brablc/lazysar I use it to observe my swarm and can see that @xmnlab uses it in similar environment.

I am so far with real time data: https://asciinema.org/a/ECaK0TKivITr7kw4RtBK79RSy . It flickers, not sure if this can be avoided.

@brablc
Copy link

brablc commented Jun 12, 2024

We might be doing similar thing. I try to visualize sar/sysstat data generally in https://github.com/brablc/lazysar I use it to observe my swarm and can see that @xmnlab uses it in similar environment.

I am so far with real time data: https://asciinema.org/a/ECaK0TKivITr7kw4RtBK79RSy . It flickers, not sure if this can be avoided.

In my I project I capture the data and display it using curses library to avoid flickering. Additionally I move the legend inside the chart area:

image

@xmnlab
Copy link
Author

xmnlab commented Jun 13, 2024

Thanks @tammoippen for the detailed explanation! Appreciate that :)

And thanks @brablc for sharing about your implementation! I am taking a look into that!

@brablc
Copy link

brablc commented Jun 14, 2024

And here my (hopefully last post) demo with real-time data collected from three hosts:

lazysar-hosts

@xmnlab
Copy link
Author

xmnlab commented Jul 3, 2024

And here my (hopefully last post) demo with real-time data collected from three hosts:

that looks awesome! thanks for sharing!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants