DimFlux: Force-Directed Doubly-Additive Line Diagrams
This repository implements a force-directed placement approach for doubly-additive line drawings.
References
This project is based on the theory and methods described in the following works.
Primary Reference
@article{Noehre2026,
title = {DimFlux: Force-directed additive line diagrams},
journal = {International Journal of Approximate Reasoning},
volume = {197},
pages = {109734},
year = {2026},
issn = {0888-613X},
doi = {https://doi.org/10.1016/j.ijar.2026.109734},
url = {https://www.sciencedirect.com/science/article/pii/S0888613X2600109X},
author = {Marcel Nöhre and Dominik Dürrschnabel and Bernhard Ganter and Gerd Stumme},
keywords = {Formal concept analysis, Force-directed placement, Additive line diagrams, DimDraw, DimFlux},
abstract = {The visualization of concept lattices is a central problem in the field of Formal Concept Analysis. Force-directed algorithms, as popular in graph drawing, are a promising approach, treating lattice diagrams as physical models, optimizing node positions based on forces derived from the lattice structure. We build on the work of Zschalig, who, however, limited himself to attribute-additive diagrams. We use a more general additivity, in which both the attributes and the objects contribute to the positions of the concept nodes. We replace the planarity enhancer used by Zschalig to obtain a starting diagram for force-directed optimization with the DimDraw algorithm, which generates structured order diagrams on its own. The combination results in DimFlux, an algorithm that leverages the advantages of DimDraw but generates additive diagrams in which readability is increased by maximizing the conflict distance between nodes and non-incident edges.}
}
Supplementary Material
@misc{Noehre2026Supplementary,
author = {Nöhre, Marcel and Dürrschnabel, Dominik and Ganter, Bernhard and Stumme, Gerd},
title = {A Visual Benchmark of DimFlux: Comparison of Line Diagrams for Concept Lattices},
month = mar,
year = 2026,
publisher = {Zenodo},
doi = {10.5281/zenodo.18936106},
url = {https://doi.org/10.5281/zenodo.18936106}
}
If you use this code in your work, please cite the above references.
Usage
Install via PyPI
Install the package from PyPI using pip.
pip install dim-flux
Execute the layout generation using the dim-flux command.
dim-flux
Install from source
Clone the repository and initialize the environment. uv will automatically create a virtual
environment and sync dependencies based on the pyproject.toml. uv will automatically create a
virtual environment.
uv sync
Execute the layout generation using uv run to ensure the correct environment context.
uv run dim-flux
The script will prompt you for a path to a .cxt file.
To export the node positions add the --export flag.
uv run dim-flux --export
The --export flag also works with the PyPI install:
dim-flux --export
Use as a library
DimFlux can also be called directly from Python via dim_flux.plot.
from dim_flux import plot
# cxt can be a path to a .cxt file, or a pandas DataFrame representing the incidence matrix
positions = plot('path/to/context.cxt')
By default plot returns the computed (x, y) coordinates in lectic order as a numpy array.
Pass export=True to instead write the PDF, GraphML and .pos exports to disk.
plot('path/to/context.cxt', export=True)
Configuration
| Category | Parameter | Description |
|---|---|---|
| Drawings | plot_si_graph |
Visualize the Supremum-Infimum graph ($f_{max}$ is highlighted) |
plot_initial_layout |
Visualize the initial layout of the concept lattice | |
plot_optimized_layout |
Visualize the final optimized layout of the concept lattice | |
| Annotations | si_graph_annotations |
Display annotations in the SI-Graph |
initial_layout_annotations |
Display annotations in the initial drawing | |
optimized_layout_annotations |
Display annotations in the final optimized drawing | |
| Forces | plot_individual_forces |
Display force vectors for objects and attributes respectively |
plot_combined_forces |
Display combined force vectors | |
plot_gradients |
Display gradient vectors at concepts | |
| Dev | plot_origin |
Display the origin $(0,0)$ |
License
This work is licensed under a Creative Commons Attribution 4.0 International License.
Metadata
Release files for dim-flux 1.0.10
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| dim_flux-1.0.10.tar.gz | 28.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| dim_flux-1.0.10-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 61.7 kB
Release files / dim_flux-1.0.10.tar.gz
| Download URL | dim_flux-1.0.10.tar.gz |
|---|---|
| Size | 28.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2d54b5c32c226ea70dee4a5b2c153e7cbbce3b0235b1bb7f5372eee60b54ad54
|
|
BLAKE2b-256 checksum How to use checksums |
d5905f0a7fc5e429f5e02befc1b99a17bd92f80a99480478f01b9868b061ca18
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / dim_flux-1.0.10-py3-none-any.whl
| Download URL | dim_flux-1.0.10-py3-none-any.whl |
|---|---|
| Size | 33.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ce3c0b40faa5470f32ff0829b104e1617d8d1ff2b2cdddc1f53e15af582e128c
|
|
BLAKE2b-256 checksum How to use checksums |
e02c195c2e896670abfb96a1a6204ace1bcb65a0067d4dfe5181822c14a3e7f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.9.15 {"installer":{"name":"uv","version":"0.9.15","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"26.04","id":"resolute","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|