{"id":14982738,"url":"https://github.com/bytemarx/exaplot","last_synced_at":"2025-10-29T16:31:03.138Z","repository":{"id":245750985,"uuid":"728471316","full_name":"bytemarx/exaplot","owner":"bytemarx","description":"A real-time data collection and graphing application for Python scripts.","archived":false,"fork":false,"pushed_at":"2024-07-05T20:53:29.000Z","size":930,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-09-29T08:01:25.575Z","etag":null,"topics":["cpython","python","python3","qt6"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bytemarx.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-07T02:26:05.000Z","updated_at":"2024-08-31T09:58:09.000Z","dependencies_parsed_at":"2024-09-28T08:00:46.919Z","dependency_job_id":"bbb05bd2-8730-4ba3-8f56-f1aaba992a25","html_url":"https://github.com/bytemarx/exaplot","commit_stats":{"total_commits":156,"total_committers":1,"mean_commits":156.0,"dds":0.0,"last_synced_commit":"1b6f75c86de78fffe93fc09b9c7aa7c01103f68a"},"previous_names":["bytemarx/exaplot"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bytemarx%2Fexaplot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bytemarx%2Fexaplot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bytemarx%2Fexaplot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bytemarx%2Fexaplot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bytemarx","download_url":"https://codeload.github.com/bytemarx/exaplot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219857515,"owners_count":16556062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpython","python","python3","qt6"],"created_at":"2024-09-24T14:05:56.354Z","updated_at":"2025-10-29T16:30:57.744Z","avatar_url":"https://github.com/bytemarx.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ExaPlot\n\nA framework for plotting and collecting real-time data with Python.\n\n![ExaPlot Preview](https://raw.githubusercontent.com/bytemarx/exaplot-gifs/5b231381077c7d591c79a28ce79b33d0f093a5ca/exaplot.gif)\n\n\nA trivial example script:\n```python\nimport math\n\nfrom exaplot import datafile, init, plot, stop\n\n# Initialize the data file and plots (we'll just use the default\n# settings for each), and set parameters for the 'run' function.\ndatafile()\ninit(frequency=5.0)\n\n\ndef run(frequency: float):\n    x = -10.0\n    while x \u003c= 10.0 and not stop():\n        y = 10 * math.sin(frequency * x) * math.exp(-x**2 / 10.0)\n        plot[1](x, y)\n        x += 0.001\n```\n\n\n### Supported Platforms\n- Linux\n- Windows\n\n\n## Building\n\nRequires:\n- CMake 3.22+\n- [CPython dependencies](https://devguide.python.org/getting-started/setup-building/index.html#build-dependencies)\n- Qt6\n- HDF5 dependencies\n\n### Linux (Bash)\n```sh\ngit submodule update --init --recursive\ncmake -DCMAKE_BUILD_TYPE=Release -B build/\nmake -j -C build/\n```\n\n### Windows (PowerShell)\nSet\n- `QT_DIR` to your Qt6 MSVC folder\n- `MSBUILD` to your `MSBuild.exe`\n- `VCPKG_ROOT` to your vcpkg folder (with [zlib](https://vcpkg.io/en/package/zlib.html) installed)\n\nand run the `winbuild.ps1` PowerShell script:\n```powershell\ngit submodule update --init --recursive\n$Env:QT_DIR = \"C:\\Qt\\6.4.0\\msvc2019_64\"\n$Env:MSBUILD = \"C:\\Program Files\\Microsoft Visual Studio\\2022\\Community\\MSBuild\\Current\\Bin\\MSBuild.exe\"\n$Env:VCPKG_ROOT = \"C:\\vcpkg\"\n.\\winbuild.ps1\n```\n\nBuilt applications can be found in `build/bin/\u003cBUILD-TYPE\u003e/` where `\u003cBUILD-TYPE\u003e` corresponds to\nthe build type specified by `CMAKE_BUILD_TYPE` (typically either `Release` or `Debug`).\n\n\n## Developing\n\nBuild Variables:\n- `-DCMAKE_BUILD_TYPE=Debug`\n    - Debug build\n- `-DCMAKE_BUILD_TYPE=Release`\n    - Release build\n- `-DWITH_TESTS=1`\n    - Build with tests (only necessary for non-debug builds)\n- `-DAPP_PLUGINS=1`\n    - Build with Qt plugin libraries\n\n\n## Application Configuration\nThe `EXACONFIG` environment variable can be used to specify a TOML-based configuration file:\n```sh\nEXACONFIG='docs/sample-config.toml' build/bin/Release/exaplot\n```\n\n### Adding External Libraries\nTo include third-party modules within the embedded interpreter's environment, use the `search_paths`\nentry within the `python` table:\n```toml\n[python]\nsearch_paths = [\n    \"/home/user/venvs/exa/lib/python3.12/site-packages\",\n]\n```\nNote that external libraries **must** match the Python version of the application (currently 3.12).\nLibraries should be set up externally via `venv`/`pip` or some other Python environment management\ntool(s).\n\n\n## Data Files\nData is saved using the [HDF5 file format](https://www.hdfgroup.org/solutions/hdf5/). If enabled,\na new data file will be generated each run containing datasets for each plot. Calls to `plot()`\nwill append new data to the respective dataset (unless the `write` argument is `False`, e.g.\n`plot[1](x, y, write=False)`). For each plot, the data file will have two datasets corresponding to\neach plot type (so for each plot, there will be a dataset for 2D plot data and a dataset for\ncolormap data).\n\nDataset names are formed by the following convention:\n```\ndataset\u003c#\u003e.\u003ctype\u003e\n```\nwhere `\u003c#\u003e` corresponds to the plot ID, and `\u003ctype\u003e` is the plot type (either `twodimen` or\n`colormap`). So, for example, the 2D dataset of plot 1 would have the name `dataset1.twodimen`.\n\nAnything that can read HDF5 files should be able to provide access to the data. For example, we can\nuse the [HDF5 Python library](https://docs.h5py.org/en/stable/):\n```python\nimport h5py\n\nwith h5py.File('data.hdf5', 'r') as f:\n    dataset = f['dataset1.twodimen']\n    ...\n```\n\n\n## Further Reading\nAPI documentation can be found [here](docs/API.md) (and similarly in the library's\n[stub file](python/exaplot.pyi)). Several example scripts are also provided as a reference.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbytemarx%2Fexaplot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbytemarx%2Fexaplot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbytemarx%2Fexaplot/lists"}