UNPKG

bands-visualiser

Version:

A plotly.js renderer for Bands, DOS, combined Bands/Dos and fatBands.

123 lines (96 loc) 2.87 kB
# Band Structure Visualiser A plotly.js renderer for Bands, DOS, combined Bands/Dos and fatBands. The `BandsVisualiser` requires atleast one of two arrays: - `bandDataArray` - `dosDataArray` Related repositories: - https://github.com/osscar-org/widget-bandsplot (A similar Jupyter widget) - https://github.com/materialscloud-org/bands-widget (outdated version used in legacy) - https://github.com/materialscloud-org/mc-react-bands (the current implementation on MCXD) # Installation The bands-visualiser entire source is published as an [npm package](https://www.npmjs.com/package/bands-visualiser). ``` npm install bands-visualiser ``` # Basic Usage The bandsVisualiser renders through plotly.js and can be invoked into a html element via: ```JSX import { BandsVisualiser } from "bands-visualiser"; BandsVisualiser(container, { bandsDataArray: [test_bands], }); ``` It's expected that each entry into this array will be an object with a "typeData" key and a "traceFormat" key. If no traceFormat is supplied, some basic formatting is applied. minimum example objects: ```JSX bandObject = { bandsData: { path: [["A", "B"], ["B","C"], ... ], paths: [{values: [[], [], ...], x:[0, 1, ... ]}] } traceFormat: {} } dosObject = { dosData: {x: [], y: [] } traceFormat: { name: "Total DOS", fillcolor: "rgba(180, 20, 20, 0.6)", // ... } } ``` aiida discerns spin polarised calculations through indexing. If you would like to render up and down spins with different format some work is needed. The `splitBands` utility can split a BandsData (passing along the same path/paths). ```JSX import { splitBandsData,} from "./lib/utils/dataUtils.js"; const splitBands = splitBandsData(bandsData, nParts=2) [bandsDown, bandsUp] = splitBands ``` Its then easy to pass traceFormatting information to this these; ```JSX bandsDataArray = [ { bandsData: bandsDown, traceFormat: { label: "Down Channel", line: { color: "blue", dash: "dash"}}}, { bandsData: bandsUp, traceFormat: { label: "Up Channel", line: { color: "red", dash: "solid"}}} ] ``` The traceFormat key follows the format of plotly traces; for a full list of possible props see: https://plotly.com/python/reference/scatter/. # Advanced Usage Projections are embedded inside the bandsDataObject; ```JSX bDO = { bandsData: { x: [], y [[]]: path: ..., paths: ...} traceFormat: {} // formatting for the projections: [ { projData: { weights: [[]], }, traceFormat: {name: "projection 1"} }, { projData: { weights: [[]], }, traceFormat: {name: "projection 2", showlegend: false} }, ] } ``` Calling the BandsVisualiser with this bDO will render projections by default: ```JSX BandsVisualiser(container, { bandsDataArray: [bDO], fermiLevels: [21], }); ```