{"id":32176290,"url":"https://github.com/mcsorkun/chemplot","last_synced_at":"2026-02-21T13:01:29.159Z","repository":{"id":44577240,"uuid":"332786823","full_name":"mcsorkun/ChemPlot","owner":"mcsorkun","description":"A python package for chemical space visualization.","archived":false,"fork":false,"pushed_at":"2024-12-17T13:11:14.000Z","size":72617,"stargazers_count":150,"open_issues_count":10,"forks_count":35,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-27T12:04:56.196Z","etag":null,"topics":["chemical-space","cheminformatics","data-visualization","dimensionality-reduction"],"latest_commit_sha":null,"homepage":"https://chemplot.readthedocs.io/en/latest/","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mcsorkun.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-01-25T15:11:22.000Z","updated_at":"2025-12-23T12:45:26.000Z","dependencies_parsed_at":"2022-08-31T00:20:49.170Z","dependency_job_id":"d3cb1291-8b92-4448-a7dc-6096e1cb8127","html_url":"https://github.com/mcsorkun/ChemPlot","commit_stats":{"total_commits":344,"total_committers":4,"mean_commits":86.0,"dds":0.3866279069767442,"last_synced_commit":"9a8942cb846e63f47eeea0f00d25031d5704deb0"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/mcsorkun/ChemPlot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcsorkun%2FChemPlot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcsorkun%2FChemPlot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcsorkun%2FChemPlot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcsorkun%2FChemPlot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mcsorkun","download_url":"https://codeload.github.com/mcsorkun/ChemPlot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mcsorkun%2FChemPlot/sbom","scorecard":{"id":632625,"data":{"date":"2025-08-11","repo":{"name":"github.com/mcsorkun/ChemPlot","commit":"6acf926e51e23f655d5b403f6f555acdc55b797c"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.2,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/21 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/publish.yml:8","Warn: no topLevel permission defined: .github/workflows/tests.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: BSD 3-Clause \"New\" or \"Revised\" License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish.yml:59"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-xgfm-fjx6-62mj"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 10 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":1,"reason":"dependency not pinned by hash detected -- score normalized to 1","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:35: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/publish.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/publish.yml:36: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:16: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/publish.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/tests.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tests.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/tests.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/tests.yml:40: update your workflow using https://app.stepsecurity.io/secureworkflow/mcsorkun/ChemPlot/tests.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:18","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:73","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:74","Warn: pipCommand not pinned by hash: .github/workflows/tests.yml:22","Info:   0 out of   6 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   3 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}}]},"last_synced_at":"2025-08-21T08:20:15.212Z","repository_id":44577240,"created_at":"2025-08-21T08:20:15.212Z","updated_at":"2025-08-21T08:20:15.212Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29681468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-21T12:30:22.644Z","status":"ssl_error","status_checked_at":"2026-02-21T12:29:55.402Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["chemical-space","cheminformatics","data-visualization","dimensionality-reduction"],"created_at":"2025-10-21T19:56:51.519Z","updated_at":"2026-02-21T13:01:29.153Z","avatar_url":"https://github.com/mcsorkun.png","language":"Jupyter Notebook","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg width=\"600\" src=\"https://raw.githubusercontent.com/mcsorkun/ChemPlot/main/docs/logo_chemplot.png\"\u003e\n\u003c/p\u003e\n\u003cbr /\u003e\n\n# ChemPlot\n\nChemplot is a python library for chemical space visualization that allows users to plot the chemical space of their molecular datasets. Chemplot contains both structural and tailored similarity algorithms to plot similar molecules together based on the needs of users. Moreover, it is easy to use even for non-experts.\n\n## Current Release Info\n\n| Version | Downloads | License | Documentation | Testing |\n| --- | --- | --- | --- | --- |\n| [![Conda Version](https://img.shields.io/conda/vn/conda-forge/chemplot.svg)](https://anaconda.org/conda-forge/chemplot)  [![PyPI version](https://img.shields.io/pypi/v/chemplot)](https://pypi.org/project/chemplot/) | [![Conda Downloads](https://img.shields.io/conda/dn/conda-forge/chemplot.svg)](https://anaconda.org/conda-forge/chemplot) [![PyPI - Downloads](https://img.shields.io/pypi/dm/chemplot)](https://pypi.org/project/chemplot/) | [![PyPI - License](https://img.shields.io/pypi/l/chemplot?color=yellow)](https://github.com/mcsorkun/ChemPlot/blob/main/LICENSE) |  [![Documentation Status](https://readthedocs.org/projects/chemplot/badge/?version=latest)](https://chemplot.readthedocs.io/en/latest/?badge=latest) | [![Tests](https://github.com/mcsorkun/ChemPlot/actions/workflows/tests.yml/badge.svg)](https://github.com/mcsorkun/ChemPlot/actions/workflows/tests.yml)  [![Coverage Status](https://coveralls.io/repos/github/mcsorkun/ChemPlot/badge.svg)](https://coveralls.io/github/mcsorkun/ChemPlot) |\n\n## Resources \n\n### User Manual\n\nYou can find the detailed features and examples in the following link: [User Manual](https://chemplot.readthedocs.io/en/latest/).\n\n### Web Application\n\nChemPlot is also available as a web application. You can use it at the following link: [Web Application](https://share.streamlit.io/mcsorkun/chemplot-web/main/web_app_chemplot.py).\n\n### Paper\n\nYou can find the details for the background on ChemPlot in our paper. You can download our paper at: [Paper](https://chemistry-europe.onlinelibrary.wiley.com/doi/full/10.1002/cmtd.202200005).\n\n## Installation\n\nThere are two different options to install ChemPlot:\n\n### Option 1: Use conda\n\nTo install ChemPlot using conda, run the following from the command line:\n\n    conda install -c conda-forge chemplot\n\n### Option 2: Use pip\n\nYou can also install ChemPlot using pip: \n\n    pip install chemplot\n    \n## How to use ChemPlot\n\nChemPlot is a cheminformatics tool whose purpose is to visualize subsets\nof the chemical space in two dimensions. It uses the [RDKit chemistry\nframework](http://www.rdkit.org), the\n[scikit-learn](http://scikit-learn.org/stable/index.html) API and the\n[umap-learn](https://github.com/lmcinnes/umap) API.\n\n### Getting started\n\nTo demonstrate how to use the functions the library offers we use\n[BBBP](https://github.com/mcsorkun/ChemPlot/blob/main/tests/test_data/C_2039_BBBP_2.csv) (blood-brain barrier penetration) [1] molecular dataset. BBBP is a\nset of molecules encoded as SMILES, which have been assigned a binary\nlabel according to their permeability properties. This dataset can be retrieved \nfrom the library as a [pandas](https://pandas.pydata.org/pandas-docs/stable/index.html)\nDataFrame object.\n\n``` {.sourceCode .python3}\nimport chemplot as cp\ndata_BBBP = cp.load_data(\"BBBP\")\n```\n\nTo visualize the molecules in 2D according to their similarity it is\nfirst needed to construct a `Plotter` object. This is the class\ncontaining all the functions ChemPlot uses to produce the desired\nvisualizations. A `Plotter` object can be constructed using\nclassmethods, which differentiate between the type of input that is feed\nto the object. In our example we need to use the method from\\_smiles. We\npass three parameters: the list of SMILES from the BBBP dataset, their\ntarget values (the binary labels) and the target type (in this case “C”,\nwhich stands for “Classification”).\n\n``` {.sourceCode .python3}\nplotter = cp.Plotter.from_smiles(data_BBBP[\"smiles\"], target=data_BBBP[\"target\"], target_type=\"C\")\n```\n\n### Plotting the results\n\nWhen the `Plotter` object was constructed descriptors for each SMILES\nwere calculated, using the library\n[mordred](http://mordred-descriptor.github.io/documentation/v0.1.0/introduction.html),\nand then selected based on the target values. We reduce the number of \ndimensions for each molecule from the number of descriptors selected to only 2. \nChemPlot uses three different algorithms in order to achieve this. \nIn this example we will first use t-SNE [2].\n\n``` {.sourceCode .python3}\nplotter.tsne()\n```\n\nThe output will be a dataframe containg the reduced dimensions and the target values.\n\n| t-SNE-1          | t-SNE-2          | target           |\n|------------------|------------------|------------------|\n| -41.056122       | 0.355575         | 1                |\n| -35.535915       | 21.648867        | 1                |\n| 23.771597        | -14.438373       | 1                |\n\nTo now visualize the chemical space of the dataset we use `visualize_plot()`.\n\n``` {.sourceCode .python3}\nplotter.visualize_plot()\n```\n\n![image](https://raw.githubusercontent.com/mcsorkun/ChemPlot/main/docs/user_manual/images/gs_tsne.png)\n\nThe second figure shows the results obtained by reducing the dimensions \nof features Principal Component Analysis (PCA) [3].\n\n``` {.sourceCode .python3}\nplotter.pca()\nplotter.visualize_plot()\n```\n\n![image](https://raw.githubusercontent.com/mcsorkun/ChemPlot/main/docs/user_manual/images/gs_pca.png)\n\nThe third figure shows the results obtained by reducing the dimensions\nof features by UMAP [4].\n\n``` {.sourceCode .python3}\nplotter.umap()\nplotter.visualize_plot()\n```\n\n![image](https://raw.githubusercontent.com/mcsorkun/ChemPlot/main/docs/user_manual/images/gs_umap.png)\n\nIn each figure the molecules are coloured by class value.\n\n### Citation\n\nIf you use ChemPlot for your scientific projects, we would appreciate if you would \ncite the paper from the Chemestry-Methods journal:\n\n```bibtex\n@article{2022ChemPlot,\n    author = {Cihan Sorkun, Murat and Mullaj, Dajt and Koelman, J. M. Vianney A. and Er, Süleyman},\n    title = {ChemPlot, a Python Library for Chemical Space Visualization},\n    journal = {Chemistry–Methods},\n    volume = {2},\n    number = {7},\n    pages = {e202200005},\n    keywords = {chemical space visualization, cheminformatics, molecular similarity, Python, tailored similarity},\n    doi = {https://doi.org/10.1002/cmtd.202200005},\n    url = {https://chemistry-europe.onlinelibrary.wiley.com/doi/abs/10.1002/cmtd.202200005},\n    eprint = {https://chemistry-europe.onlinelibrary.wiley.com/doi/pdf/10.1002/cmtd.202200005},\n    abstract = {Visualizing chemical spaces streamlines the analysis of molecular datasets by reducing the information \n    to human perception level, hence it forms an integral piece of molecular engineering, including chemical library design, \n    high-throughput screening, diversity analysis, and outlier detection. We present here ChemPlot, which enables users to \n    visualize the chemical space of molecular datasets in both static and interactive ways. ChemPlot features structural and \n    tailored similarity methods, together with three different dimensionality reduction methods: PCA, t-SNE, and UMAP. \n    ChemPlot is the first visualization software that tackles the activity/property cliff problem by incorporating tailored similarity. \n    With tailored similarity, the chemical space is constructed in a supervised manner considering target properties. Additionally, \n    we propose a metric, the Distance Property Relationship score, to quantify the property difference of similar (i. e. close) \n    molecules in the visualized chemical space. ChemPlot can be installed via Conda or PyPI (pip) and a web application is freely \n    accessible at https://www.amdlab.nl/chemplot/.},\n    year = {2022}\n}\n```\n\n### Contact\n\nFor any question you can contact us through email:\n\n- [Murat Cihan Sorkun](mailto:mcsorkun@gmail.com)\n- [Dajt Mullaj](mailto:dajt.mullai@gmail.com)\n- [Jackson Warner Burns](mailto:jwburns@mit.edu)\n\n* * * * *\n\n\u003ch3\u003e\nReferences:\n\n\u003c/h3\u003e\n\n[1]: **Martins, Ines Filipa, et al.** (2012). [A Bayesian approach to\n    in silico blood-brain barrier penetration\n    modeling.](https://pubmed.ncbi.nlm.nih.gov/22612593/) Journal of\n    chemical information and modeling 52.6, 1686-1697\n\n[2]: **van der Maaten, Laurens, Hinton, Geoffrey.** (2008).\n    [Viualizingdata using\n    t-SNE.](https://www.jmlr.org/papers/volume9/vandermaaten08a/vandermaaten08a.pdf?fbclid=IwAR0Bgg1eA5TFmqOZeCQXsIoL6PKrVXUFaskUKtg6yBhVXAFFvZA6yQiYx-M)\n    Journal of Machine Learning Research. 9. 2579-2605.\n    \n[3]: **Wold, S., Esbensen, K., Geladi, P.** (1987). [Principal\n    component\n    analysis.](https://www.sciencedirect.com/science/article/abs/pii/0169743987800849)\n    Chemometrics and intelligent laboratory systems. 2(1-3). 37-52.\n\n[4]: **McInnes, L., Healy, J., Melville, J.** (2018). [Umap: Uniform\n    manifold approximation and projection for dimension\n    reduction.](https://arxiv.org/abs/1802.03426) arXivpreprint\n    arXiv:1802.03426.\n    \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcsorkun%2Fchemplot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmcsorkun%2Fchemplot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmcsorkun%2Fchemplot/lists"}