{"id":50654095,"url":"https://github.com/ShujiaHuang/geneview","last_synced_at":"2026-06-24T19:00:37.152Z","repository":{"id":43577249,"uuid":"50284527","full_name":"ShujiaHuang/geneview","owner":"ShujiaHuang","description":"Genomics data visualization in Python by using matplotlib.","archived":false,"fork":false,"pushed_at":"2026-06-03T09:47:54.000Z","size":11366,"stargazers_count":69,"open_issues_count":2,"forks_count":9,"subscribers_count":4,"default_branch":"master","last_synced_at":"2026-06-03T10:24:21.901Z","etag":null,"topics":["bioinformatics","bioinformatics-tool","data-visualization","genomics-data-visualization","matplotlib","plotting","python","visualization"],"latest_commit_sha":null,"homepage":"","language":"Python","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/ShujiaHuang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2016-01-24T11:28:08.000Z","updated_at":"2026-06-03T09:47:58.000Z","dependencies_parsed_at":"2022-08-12T10:41:52.190Z","dependency_job_id":"c894d10c-e130-450d-80c4-28414d579212","html_url":"https://github.com/ShujiaHuang/geneview","commit_stats":{"total_commits":348,"total_committers":3,"mean_commits":116.0,"dds":0.008620689655172376,"last_synced_commit":"586e256deb5275c375ff6cb5f306da5eace9694f"},"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/ShujiaHuang/geneview","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShujiaHuang%2Fgeneview","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShujiaHuang%2Fgeneview/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShujiaHuang%2Fgeneview/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShujiaHuang%2Fgeneview/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ShujiaHuang","download_url":"https://codeload.github.com/ShujiaHuang/geneview/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ShujiaHuang%2Fgeneview/sbom","scorecard":{"id":129508,"data":{"date":"2025-08-11","repo":{"name":"github.com/ShujiaHuang/geneview","commit":"7414bb422660cf376230ee6a174eb082cba18caa"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"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":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/main.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":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"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":"Code-Review","score":0,"reason":"Found 0/30 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":"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":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"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":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/ShujiaHuang/geneview/main.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/main.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/ShujiaHuang/geneview/main.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/main.yml:64: update your workflow using https://app.stepsecurity.io/secureworkflow/ShujiaHuang/geneview/main.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:49","Warn: pipCommand not pinned by hash: .github/workflows/main.yml:51","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   2 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"}},{"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: GNU General Public License v3.0: 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":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"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":0,"reason":"11 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2018-34 / GHSA-2fc2-6r4j-p65h","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2018-33 / GHSA-cw6w-4rcx-xphc","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52","Warn: Project is vulnerable to: PYSEC-2020-73","Warn: Project is vulnerable to: PYSEC-2019-156 / GHSA-xp76-357g-9wqq","Warn: Project is vulnerable to: PYSEC-2023-102","Warn: Project is vulnerable to: PYSEC-2023-114"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T04:55:20.717Z","repository_id":43577249,"created_at":"2025-08-16T04:55:20.717Z","updated_at":"2025-08-16T04:55:20.717Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34745456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-24T02:00:07.484Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["bioinformatics","bioinformatics-tool","data-visualization","genomics-data-visualization","matplotlib","plotting","python","visualization"],"created_at":"2026-06-07T23:00:21.506Z","updated_at":"2026-06-24T19:00:37.140Z","avatar_url":"https://github.com/ShujiaHuang.png","language":"Python","funding_links":[],"categories":["Biomedical Research \u0026 Drug Discovery"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/ShujiaHuang/geneview\"\u003e\n    \u003cimg height=\"180\" src=\"docs/assets/images/geneview-log.svg\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\n# geneview: A python package for visualizing genomics data\n\n[![PyPI Version](https://img.shields.io/pypi/v/geneview.svg)](https://pypi.org/project/geneview/)\n[![Python](https://img.shields.io/pypi/pyversions/geneview.svg?style=plastic)](https://badge.fury.io/py/geneview)\n![Tests](https://github.com/ShujiaHuang/geneview/workflows/CI/badge.svg)\n[![Code Coverage](https://codecov.io/gh/ShujiaHuang/geneview/branch/master/graph/badge.svg)](https://codecov.io/gh/ShujiaHuang/geneview)\n\n**geneview** is a toolkit for making attractive and informative genomics graphics, available as both a **Python library** and a **command-line tool**.\nIt is built on top of [matplotlib](https://matplotlib.org/) and tightly integrated with the PyData \nstack, including support for `numpy` and `pandas` data structures. And now it is actively developed.\n\n**geneview** provides two ways to use:\n\n- **Python library** — Import `geneview` in your scripts for full programmatic control over genomics figures.\n- **Command-line tool** — Run `geneview \u003csubcommand\u003e` directly from the terminal to create publication-quality plots without writing any Python code.\n\nSome of the features that geneview offers are:\n\n- **Manhattan plot** — GWAS association results with significance thresholds, top-SNP annotation, and chromosome zoom.\n- **Q-Q plot** — Quantile-quantile plots for P-value distributions with genomic inflation factor (λ).\n- **Admixture plot** — Population structure visualization from ADMIXTURE output (.Q files) with hierarchical clustering.\n- **Venn diagram** — Set intersection diagrams for 2–6 datasets with customizable petal labels and colors.\n- **Karyotype plot** — Cytogenetic band visualization with G-banding color schemes.\n- **Genome Tracks** — Gviz-style track browser with IdeogramTrack (chromosome ideogram), AnnotationTrack, GeneRegionTrack (four drawing styles — UCSC with backbone/stepped polygons, flybase, tssarrow, exonarrows — plus strand coloring, intron chevron arrows, and left-positioned labels), DataTrack (line/histogram/heatmap + average/confint/smooth/horizon/grid/regression), SequenceTrack (nucleotide display), AlignmentsTrack (BAM/CRAM pileup/sashimi with read direction arrows, strand coloring, clipping, overlap highlighting, read labels, custom color_fn), BAMCoverageTrack (standalone coverage line/fill), VCFTrack (variant display with custom coloring), GroupedAlignmentsTrack (grouped BAM reads), DetailsAnnotationTrack (detail panels), HighlightTrack, and OverlayTrack. BigBed file support included. CLI supports BAM/CRAM, VCF, and all track types directly.\n- **Plot Styles** — Built-in journal-compliant styles (**Nature**, **Science**, **Cell**) that configure fonts, sizes, colours, and export settings in a single call.\n- **Color palettes** — Curated color schemes (XKCD RGB, Circos, matplotlib colormaps) optimized for genomics figures.\n- High-level abstractions for structuring grids of plots that let you easily build complex visualizations.\n\n\n## Installation\n\nTo install the released version, just do\n\n```bash\npip install geneview\n```\n\nThis command will install `geneview` and all the dependencies.\n\nFor genome tracks with BigWig, BAM, and CRAM support:\n\n```bash\npip install geneview[genometracks]\n```\n\n### Install from source\n\n```bash\ngit clone https://github.com/ShujiaHuang/geneview.git\ncd geneview\npip install .\n```\n\n## Quick start\n\n**geneview** can be used in two ways: as a **command-line tool** for quick plotting without coding, or as a **Python library** for programmatic access.\n\n---\n\n### Command-line interface (CLI)\n\nAfter installation, the `geneview` command is available in your terminal. Run `geneview --help` to see all available subcommands:\n\n```bash\ngeneview --help\n```\n\n```\nsubcommands:\n  manhattan    Create a Manhattan plot from GWAS association results.\n  qq           Create a Q-Q plot from GWAS association results.\n  venn         Create a Venn diagram from 2-6 input files.\n  admixture    Create an Admixture plot from ADMIXTURE .Q output.\n  tracks       Create a genome track plot from BED, GFF, BAM, VCF, or bedGraph files.\n```\n\nUse `geneview \u003csubcommand\u003e --help` for detailed options of each command.\n\n#### Manhattan plot\n\nCreate a Manhattan plot from a PLINK2.x association output (tab-delimited, with columns `#CHROM`, `POS`, `P`):\n\n```bash\ngeneview manhattan -i gwas_results.assoc -o manhattan.png\n```\n\nAdd significance markers and annotate top SNPs:\n\n```bash\ngeneview manhattan -i gwas_results.assoc -o manhattan.png \\\n    --title \"My GWAS\" \\\n    --sign-marker-p 1e-6 \\\n    --annotate-topsnp\n```\n\nApply a journal-compliant plot style:\n\n```bash\ngeneview manhattan -i gwas_results.assoc -o manhattan_nature.png \\\n    --title \"My GWAS\" \\\n    --sign-marker-p 1e-6 \\\n    --annotate-topsnp \\\n    --style nature\n```\n\nPlot only a specific chromosome:\n\n```bash\ngeneview manhattan -i gwas_results.assoc --chr chr8 -o manhattan_chr8.png\n```\n\nUse CSV input with custom column names:\n\n```bash\ngeneview manhattan -i gwas.csv --sep \",\" --chrom CHROM --pos BP --pv PVAL -o manhattan.png\n```\n\n#### Q-Q plot\n\nCreate a Q-Q plot from a file containing a P-value column:\n\n```bash\ngeneview qq -i gwas_results.assoc -o qq.png\n```\n\nCustomize title and appearance:\n\n```bash\ngeneview qq -i gwas_results.assoc -o qq.png \\\n    --title \"GWAS QQ Plot\" \\\n    --marker \"o\" --figsize 6 6\n```\n\nApply a Science journal style:\n\n```bash\ngeneview qq -i gwas_results.assoc -o qq_science.png \\\n    --title \"GWAS QQ Plot\" \\\n    --style science\n```\n\n#### Venn diagram\n\nCreate a Venn diagram by comparing 2–6 gene/variant list files (one identifier per line):\n\n```bash\ngeneview venn -i genes_A.txt genes_B.txt -o venn2.png\n```\n\nCompare three datasets with custom names and colors:\n\n```bash\ngeneview venn -i DEG_list1.txt DEG_list2.txt DEG_list3.txt \\\n    --names \"Study A\" \"Study B\" \"Study C\" \\\n    --palette plasma \\\n    --legend-use-petal-color \\\n    -o venn3.png\n```\n\nApply a Cell journal style:\n\n```bash\ngeneview venn -i DEG_list1.txt DEG_list2.txt DEG_list3.txt \\\n    --names \"Study A\" \"Study B\" \"Study C\" \\\n    --palette plasma \\\n    --legend-use-petal-color \\\n    --style cell \\\n    -o venn3_cell.png\n```\n\n#### Admixture plot\n\nCreate an Admixture plot from the standard ADMIXTURE `.Q` output and a population info file:\n\n```bash\ngeneview admixture -i output.3.Q -p population.txt -o admixture.png\n```\n\nCustomize appearance and specify population order:\n\n```bash\ngeneview admixture -i output.5.Q -p population.txt \\\n    --palette Set1 --edgewidth 2.0 \\\n    --group-order POP1 POP2 POP3 POP4 POP5 \\\n    --set-xticklabel-top \\\n    -o admixture_K5.png\n```\n\nApply a Nature journal style:\n\n```bash\ngeneview admixture -i output.5.Q -p population.txt \\\n    --palette Set1 --edgewidth 2.0 \\\n    --group-order POP1 POP2 POP3 POP4 POP5 \\\n    --set-xticklabel-top \\\n    --style nature \\\n    -o admixture_K5_nature.png\n```\n\n#### Genome tracks\n\nCreate a genome browser-style track plot from BED, GFF, and bedGraph files:\n\n```bash\ngeneview tracks --region chr7:26490000-26720000 \\\n    --ideogram \\\n    -a cpg_islands.bed \\\n    -g gene_models.gtf \\\n    -d coverage.bedgraph \\\n    -o genome_tracks.png\n```\n\nAdd BAM alignment pileup, BAM coverage, and VCF variant tracks:\n\n```bash\ngeneview tracks --region chr14:66903600-66905100 \\\n    --vcf hg002.chr14.vcf.gz \\\n    -b illumina.chr14.bam --aln-type pileup --paired --aln-color gray \\\n    --bam-coverage illumina.chr14.bam --coverage-type fill \\\n    --reference chr14.fa \\\n    -o vcf_bam_tracks.png\n```\n\nCustomize data track appearance and add highlight regions:\n\n```bash\ngeneview tracks --region chr7:26M-27M \\\n    -d signal.bedgraph --data-type line --data-color blue \\\n    -a features.bed --annotation-shape box \\\n    --highlight regions.bed --highlight-fill yellow \\\n    -o custom_tracks.png\n```\n\nApply a journal-compliant plot style:\n\n```bash\ngeneview tracks --region chr7:26490000-26720000 \\\n    --ideogram \\\n    -a cpg_islands.bed \\\n    -g gene_models.gtf \\\n    -d coverage.bedgraph \\\n    --style nature \\\n    -o genome_tracks_nature.png\n```\n\n---\n\n### Python API\n\n#### **Manhattan** and **Q-Q** plot\n\nWe use a PLINK2.x association output data `gwas.csv` which\nis in [geneview-data](https://github.com/ShujiaHuang/geneview-data) directory, \nas the input for the plots below. Here is the format preview of `gwas`:\n\n|**#CHROM**|**POS**|**ID**|**REF**|**ALT**|**A1**|**TEST**|**OBS_CT**|**BETA**|**SE**|**T_STAT**|**P**|\n|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|:-----:|\n|chr1|904165|1\\_904165|G|A|A|ADD|282|-0.0908897|0.195476|-0.464967|0.642344|\n|chr1|1563691|1\\_1563691|T|G|G|ADD|271|0.447021|0.422194|1.0588|0.290715|\n|chr1|1707740|1\\_1707740|T|G|G|ADD|283|0.149911|0.161387|0.928888|0.353805|\n|chr1|2284195|1\\_2284195|T|C|C|ADD|275|-0.024704|0.13966|-0.176887|0.859739|\n|chr1|2779043|1\\_2779043|T|C|T|ADD|272|-0.111771|0.139929|-0.79877|0.425182|\n|chr1|2944527|1\\_2944527|G|A|A|ADD|276|-0.054472|0.166038|-0.32807|0.743129|\n|chr1|3803755|1\\_3803755|T|C|T|ADD|283|-0.0392713|0.128528|-0.305547|0.760193|\n|chr1|4121584|1\\_4121584|A|G|G|ADD|279|0.120902|0.127063|0.951511|0.342239|\n|chr1|4170048|1\\_4170048|C|T|T|ADD|280|0.250807|0.143423|1.74873|0.0815274|\n|chr1|4180842|1\\_4180842|C|T|T|ADD|277|0.209195|0.146122|1.43165|0.153469|\n|chr1|6053630|1\\_6053630|T|G|G|ADD|269|-0.210917|0.129069|-1.63414|0.103503|\n|chr1|7569602|1\\_7569602|C|T|C|ADD|281|-0.136834|0.13265|-1.03154|0.303249|\n|chr1|7575666|1\\_7575666|T|C|C|ADD|277|-0.231278|0.159448|-1.45049|0.14815|\n\n#### Manhattan plot with default parameters\n\nThe `manhattanplot()` function in **geneview** takes a data frame with\ncolumns containing the chromosomal name/id, chromosomal position,\nP-value and optionally the name of SNP(e.g. rsID in dbSNP).\n\nBy default, `manhattanplot()` looks for column names corresponding to\nthose outout by the plink2 association results, namely, `#CHROM`,\n`POS`, `P`, and `ID`, although different column names can be\nspecificed by user. Calling `manhattanplot()` function with a data frame\nof GWAS results as the single argument draws a basic manhattan plot,\ndefaulting to a darkblue and lightblue color scheme.\n\n```python\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\n# load data\ndf = gv.load_dataset(\"gwas\")\n# Plot a basic manhattan plot with horizontal xtick labels and the figure will display in screen.\nax = gv.manhattanplot(data=df)\nplt.show()\n```\n\n![manhattan_plot.png](./examples/figures/manhattan_plot.png)\n\nRotate the x-axis tick label by setting `xticklabel_kws` to avoid label\noverlap:\n\n```python\nax = manhattanplot(data=df, xticklabel_kws={\"rotation\": \"vertical\"})\n```\n\n![manhattan_plot.png](./examples/figures/manhattan_plot_xviertical.png)\n\nOr rotate the labels 45 degrees by setting `xticklabel_kws={\"rotation\": 45}`.\n\nWhen run with default parameters, the `manhattanplot()` function draws\nhorizontal lines drawn at $-log_{10}{(1e-5)}$ for \"**suggestive**\"\nassociations and $-log_{10}{(5e-8)}$ for the \"**genome-wide\nsignificant**\" threshold. These can be move to different locations or\nturned off completely with the arguments `suggestiveline` and\n`genomewideline`, respectively.\n\n\n\n```python\nax = manhattanplot(data=df,\n                   suggestiveline=None,  # Turn off suggestiveline\n                   genomewideline=None,  # Turn off genomewideline\n                   xticklabel_kws={\"rotation\": \"vertical\"})\n```\n\n![manhattan_plot_xviertical_noline.png](./examples/figures/manhattan_plot_xviertical_noline.png)\n\nThe behavior of the `manhattanplot` function changes slightly when\nresults from only a single chromosome is used. Here, instead of plotting\nalternating colors and chromosome ID on the x-axis, the SNP\\'s position\non the chromosome is plotted on the x-axis:\n\n```python\n# plot only results of chromosome 8.\nmanhattanplot(data=df, CHR=\"chr8\", xlabel=\"Chromosome 8\")\n```\n\n![manhattan_plot_xviertical_noline.png](./examples/figures/manhattan_plot_chr8.png)\n\n`manhattanplot()` funcion has the ability to highlight SNPs with\nsignificant GWAS signal and annotate the Top SNP, which has the lowest\nP-value:\n\n\n```python\nax = manhattanplot(data=df,\n                   sign_marker_p=1e-6,  # highline the significant SNP with ``sign_marker_color`` color.\n                   is_annotate_topsnp=True,  # annotate the top SNP\n                   xticklabel_kws={\"rotation\": \"vertical\"})\n```\n\n![manhattan_anno_plot.png](./examples/figures/manhattan_plot_chr8.png)\n\nAdditionally, highlighting SNPs of interest can be combined with\nlimiting to a single chromosome to enable \\\"zooming\\\" into a particular\nregion containing SNPs of interest.\n\n![manhattan_anno_plot.png](./examples/figures/manhattan_anno_plot.png)\n\n#### Show a better manhattan plot\nFuther graphical parameters can be passed to the `manhattanplot()` function \nto control thing like plot title, point character, size, colors, etc. \nHere is the example:\n\n```python\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\n# common parameters for plotting\nplt_params = {\n    \"pdf.fonttype\": 42,\n    \"font.sans-serif\": \"Arial\",\n    \"legend.fontsize\": 14,\n    \"axes.titlesize\": 18,\n    \"axes.labelsize\": 16,\n    \"xtick.labelsize\": 14,\n    \"ytick.labelsize\": 14\n}\nplt.rcParams.update(plt_params)\n\n# Create a manhattan plot\nf, ax = plt.subplots(figsize=(12, 4), facecolor=\"w\", edgecolor=\"k\")\nxtick = set([\"chr\" + i for i in list(map(str, range(1, 10))) + [\"11\", \"13\", \"15\", \"18\", \"21\", \"X\"]])\n_ = gv.manhattanplot(data=df,\n                     marker=\".\",\n                     sign_marker_p=1e-6,  # Genome wide significant p-value\n                     sign_marker_color=\"r\",\n                     snp=\"ID\",  # The column name of annotation information for top SNPs.\n\n                     title=\"Test\",\n                     xtick_label_set=xtick,\n                  \n                     xlabel=\"Chromosome\",\n                     ylabel=r\"$-log_{10}{(P)}$\",\n\n                     sign_line_cols=[\"#D62728\", \"#2CA02C\"],\n                     hline_kws={\"linestyle\": \"--\", \"lw\": 1.3},\n\n                     is_annotate_topsnp=True,\n                     ld_block_size=50000,  # 50000 bp\n                     text_kws={\"fontsize\": 12,\n                               \"arrowprops\": dict(arrowstyle=\"-\", color=\"k\", alpha=0.6)},\n                     ax=ax)\n```\n\n![manhattan.png](./examples/figures/manhattan.png)\n\n#### Plot Styles for Journal Submission\n\ngeneview includes built-in styles that produce figures compliant with the requirements of **Nature**, **Science**, and **Cell**. Each style configures fonts, sizes, colour palettes, figure dimensions, and export settings automatically. Styles work with all plot types — including Manhattan, Q-Q, Venn, Admixture, and **Genome Tracks**.\n\n```python\nimport geneview as gv\n\n# List available styles\nprint(gv.list_styles())\n# ['cell', 'geneview', 'nature', 'science']\n\n# Apply a style to a single plot\nax = gv.manhattanplot(data=df, style=\"nature\")\n\n# Or use as a context manager\nwith gv.use_style(\"science\"):\n    ax = gv.qqplot(data=df[\"P\"])\n    plt.savefig(\"qq_science.pdf\")\n\n# Or set a style globally for all subsequent plots\ngv.apply_style(\"cell\")\n\n# Genome tracks in Nature style\nfrom geneview.genometracks import plot_tracks, GenomeAxisTrack, IdeogramTrack, GenomicInterval\nregion = GenomicInterval(\"chr7\", 20_000_000, 60_000_000)\naxes = plot_tracks([IdeogramTrack(chromosome=\"chr7\"), GenomeAxisTrack()], region=region, style=\"nature\")\n```\n\n| Style | Description | Font size | Figure width | Palette |\n|-------|-------------|-----------|--------------|--------|\n| `geneview` | Default — readable, general-purpose | 10–12 pt | 9 in | geneview legacy |\n| `nature` | Nature Research Figure Guide | 5–7 pt | 3.5 in | Wong (colour-blind safe) |\n| `science` | AAAS *Science* guidelines | 6–10 pt | 2.36 in | Okabe–Ito |\n| `cell` | Cell Press guidelines | 6–8 pt | 3.35 in | Cell accessible |\n\nYou can also define and register your own custom style:\n\n```python\nfrom geneview.plotstyle import PlotStyle, register_style\n\nmy_style = PlotStyle(\n    name=\"my_journal\",\n    font_size_title=9.0,\n    font_size_label=8.0,\n    figure_figsize=(4.0, 3.0),\n    color_palette=[\"#1f77b4\", \"#ff7f0e\", \"#2ca02c\"],\n)\nregister_style(my_style)\nax = gv.manhattanplot(data=df, style=\"my_journal\")\n```\n\nSee the [Plot Styles tutorial](./docs/tutorial/plotstyle.ipynb) for a full walkthrough.\n\n#### QQ plot with default parameters\n\nThe `qqplot()` function can be used to generate a Q-Q plot to visualize the \ndistribution of association \"P-value\". The `qqplot()` function takes a vector \nof P-values as its the only required argument.\n\n```python\n\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\n# load data\ndf = gv.load_dataset(\"gwas\")\n# Plot a basic manhattan plot with horizontal xtick labels and the figure will display in screen.\nax = gv.qqplot(data=df[\"P\"])\nplt.show()\n\n```\n\n![qq.png](./examples/figures/qq.png)\n\n#### Show a better QQ plot\n\nFuther graphical parameters can be passed to ``qqplot()`` to control the plot \ntitle, axis labels, point characters, colors, points sizes, etc. Here is the \nexample:\n\n```python\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\nf, ax = plt.subplots(figsize=(6, 6), facecolor=\"w\", edgecolor=\"k\")\n_ = gv.qqplot(data=df[\"P\"],\n              marker=\"o\",\n              title=\"Test\",\n              xlabel=r\"Expected $-log_{10}{(P)}$\",\n              ylabel=r\"Observed $-log_{10}{(P)}$\",\n              ax=ax)\n```\n\n- [More tutorials about GWAS](./docs/tutorial/gwas_plot.ipynb)\n\n### Admixture plot\n\nGenerate **Admixture** plot from the raw admixture output result:\n\n#### simple example for admixtureplot\n\n```python\nimport matplotlib.pyplot as plt\nfrom geneview import load_dataset\nfrom geneview import admixtureplot\n\nf, ax = plt.subplots(1, 1, figsize=(14, 2), facecolor=\"w\", constrained_layout=True, dpi=300)\nadmixtureplot(data=load_dataset(\"admixture_output.Q\"), \n              population_info=load_dataset(\"admixture_population.info\"),\n              ylabel_kws={\"rotation\": 45, \"ha\": \"right\"},\n              ax=ax)\n```\n\n![admixtureplot](./examples/figures/admixture.png)\n\nor\n\n```python\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\nadmixture_output_fn = gv.load_dataset(\"admixture_output.Q\")\npopulation_group_fn = gv.load_dataset(\"admixture_population.info\")\n\n# define the order for population to plot\npop_group_1kg = [\"KHV\", \"CDX\", \"CHS\", \"CHB\", \"JPT\", \"BEB\", \"STU\", \"ITU\", \"GIH\", \"PJL\", \"FIN\", \n                 \"CEU\", \"GBR\", \"IBS\", \"TSI\", \"PEL\", \"PUR\", \"MXL\", \"CLM\", \"ASW\", \"ACB\", \"GWD\", \n                 \"MSL\", \"YRI\", \"ESN\", \"LWK\"]\n\nf, ax = plt.subplots(1, 1, figsize=(14, 2), facecolor=\"w\", constrained_layout=True, dpi=300)\ngv.admixtureplot(data=admixture_output_fn, \n                        population_info=population_group_fn,\n                        edgewidth=2.0,\n                        group_order=pop_group_1kg,\n                        shuffle_popsample_kws={\"frac\": 0.5},\n                        ylabel_kws={\"rotation\": 45, \"ha\": \"right\"},\n                        ax=ax)\n```\n\n![admixtureplot](./examples/figures/admixture.png)\n\n- [The format of input files and more details about admixtureplot](./docs/tutorial/admixture.ipynb)\n\n### Venn plots\n\n**Venn diagrams for 2, 3, 4, 5, 6 sets.**\n\n![Venn.png](./examples/figures/venn.png)\n\n#### Minimal venn plot example\n\n```python\nimport geneview as gv\n\ntable = {\n    \"Dataset 1\": {\"A\", \"B\", \"D\", \"E\"},\n    \"Dataset 2\": {\"C\", \"F\", \"B\", \"G\"},\n    \"Dataset 3\": {\"J\", \"C\", \"K\"}\n}\nax = gv.venn(table) \n\n```\n\n![venn.png](./examples/figures/venn3.png)\n\n#### Manual adjustment of petal labels\n\nIf necessary, the labels on the petals (i.e., various intersections in the Venn diagram) can be adjusted manually.\n\nFor this, `generate_petal_labels()` can be called first to get the \n`petal_labels` dictionary, which can be modified.\n\nAfter modification, pass petal_labels to functions `venn()`.\n\n```python\nfrom numpy.random import choice\nimport geneview as gv\n\ndataset_dict = {\n    name: set(choice(1000, 250, replace=False))\n    for name in list(\"ABCD\")\n}\n\npetal_labels = gv.generate_petal_labels(dataset_dict.values(), fmt=\"{logic}\\n({percentage:.1f}%)\") \nax = gv.venn(data=petal_labels, names=list(dataset_dict.keys()), legend_use_petal_color=True)\n\n```\n\n![venn4.png](./examples/figures/venn4.png)\n\n- [More tutorials about venn](./docs/tutorial/venn.ipynb)\n\n### Genome Tracks\n\nThe **genome tracks** module provides a Gviz-inspired track browser for visualizing genomic features along a shared coordinate axis. Gene models support **four drawing styles**: UCSC (backbone line, thick CDS blocks, thin UTR blocks, stepped polygons for CDS/UTR transitions, intron chevron arrows), flybase (backbone + arrow-tipped last exon), tssarrow (TSS arrow + half-height exons), and exonarrows (full-height exons with arrows inside). All styles include strand-based coloring and left-positioned gene labels. Read alignments show **directional block arrows** indicating each read's orientation. It supports multiple track types including IdeogramTrack (chromosome ideogram), AnnotationTrack, GeneRegionTrack, DataTrack, SequenceTrack, AlignmentsTrack, BAMCoverageTrack, VCFTrack, GroupedAlignmentsTrack, DetailsAnnotationTrack, HighlightTrack, and OverlayTrack.\n\n#### IdeogramTrack — Chromosome ideogram (auto-loaded)\n\n`IdeogramTrack` automatically downloads human karyotype data (hg38 or hg19) from the geneview-data repository — no manual data preparation needed:\n\n```python\nfrom geneview.genometracks import IdeogramTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\nimport matplotlib.pyplot as plt\n\n# Auto-load hg38 karyotype for chromosome 7\nitrack = IdeogramTrack(chromosome=\"chr7\")\ngtrack = GenomeAxisTrack()\n\nregion = GenomicInterval(\"chr7\", 20_000_000, 60_000_000)\naxes = plot_tracks([itrack, gtrack], region=region, figsize=(12, 3))\nplt.show()\n```\n\n![genome_tracks_ideogram.png](./examples/figures/genome_tracks_ideogram.png)\n\n#### Comprehensive genome tracks example\n\nCombine all track types into a multi-panel figure:\n\n```python\nfrom geneview.genometracks import (\n    IdeogramTrack, GenomeAxisTrack, AnnotationTrack,\n    GeneRegionTrack, DataTrack, HighlightTrack,\n    GenomicInterval, plot_tracks, read_bed, read_gff, read_bedgraph,\n)\nimport pandas as pd\n\n# Load data\ncpg_data = read_bed(\"examples/data/genome_tracks/cpg_islands.bed\")\ngene_data = read_gff(\"examples/data/genome_tracks/gene_models.gtf\")\ncov_data = read_bedgraph(\"examples/data/genome_tracks/coverage.bedgraph\")\n\nregion = GenomicInterval(\"chr7\", 26_490_000, 26_720_000)\n\n# Create tracks\nitrack = IdeogramTrack(chromosome=\"chr7\")\ngtrack = GenomeAxisTrack(little_ticks=True)\natrack = AnnotationTrack(cpg_data, name=\"CpG Islands\")\ngrtrack = GeneRegionTrack(gene_data, name=\"Gene Models\", collapse_transcripts=\"longest\")\ndtrack = DataTrack(cov_data, type=\"histogram\", name=\"Coverage\")\n\n# Add highlights\nht = HighlightTrack(\n    regions=pd.DataFrame({\n        \"chrom\": [\"chr7\", \"chr7\"],\n        \"start\": [26_505_000, 26_600_000],\n        \"end\":   [26_535_000, 26_665_000],\n    }),\n    track_list=[atrack, grtrack, dtrack],\n    fill=\"#FFF3BF\", alpha=0.3,\n)\n\n# Plot\naxes = plot_tracks([itrack, gtrack, ht], region=region, figsize=(16, 10))\nplt.show()\n```\n\n![genome_tracks_comprehensive.png](./examples/figures/genome_tracks_comprehensive.png)\n\n- [Complete genome tracks guide](./docs/genome_tracks_guide.md)\n- [Genome tracks tutorial notebook](./docs/tutorial/genome_tracks.ipynb)\n- [Plot styles tutorial](./docs/tutorial/plotstyle.ipynb)\n- [More example scripts](./examples/scripts/)\n\n#### BAM / CRAM coverage\n\nCompute alignment coverage from BAM or CRAM files and visualize as a DataTrack:\n\n```python\nfrom geneview.genometracks import (\n    GenomeAxisTrack, DataTrack, GenomicInterval, plot_tracks,\n    read_bam_coverage, read_cram_coverage,\n)\nimport matplotlib.pyplot as plt\n\nregion = GenomicInterval(\"chr7\", 26_500_000, 26_800_000)\n\n# BAM (must be indexed with samtools index)\nbam_cov = read_bam_coverage(\"sample.bam\", region=region)\nbam_track = DataTrack(bam_cov, type=\"histogram\", name=\"BAM Coverage\")\n\n# CRAM (reference FASTA usually required)\ncram_cov = read_cram_coverage(\"sample.cram\", region=region, reference=\"hg38.fa\")\ncram_track = DataTrack(cram_cov, type=\"histogram\", name=\"CRAM Coverage\")\n\naxes = plot_tracks([GenomeAxisTrack(), bam_track, cram_track], region=region, figsize=(14, 6))\nplt.show()\n```\n\n#### SequenceTrack — Nucleotide display\n\nDisplay nucleotide sequences as colored letters, boxes, or lines depending on zoom level:\n\n```python\nfrom geneview.genometracks import SequenceTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\n\nseq = \"ATCGATCGATCGATCG\" * 5\ntrack = SequenceTrack(sequence=seq, name=\"Sequence\")\naxes = plot_tracks([GenomeAxisTrack(), track],\n                   region=GenomicInterval(\"chr1\", 0, len(seq)), figsize=(12, 3))\n```\n\n![genome_tracks_sequence_letters.png](./examples/figures/genome_tracks_sequence_letters.png)\n\n#### AlignmentsTrack — BAM/CRAM read alignments\n\nVisualize read alignments with coverage histograms, pileup diagrams, and sashimi plots. Each read is drawn as a directional block arrow indicating its alignment orientation (requires `pysam`):\n\n```python\nfrom geneview.genometracks import AlignmentsTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\n\ntrack = AlignmentsTrack(filepath=\"alignments.bam\", type=[\"coverage\", \"pileup\"])\naxes = plot_tracks([GenomeAxisTrack(), track],\n                   region=GenomicInterval(\"chr12\", 2966800, 2966950), figsize=(12, 6))\n```\n\n![genome_tracks_alignments_combined.png](./examples/figures/genome_tracks_alignments_combined.png)\n\n#### BAMCoverageTrack — Standalone BAM coverage\n\nDisplay per-base coverage from a BAM/CRAM file as a continuous line or filled area:\n\n```python\nfrom geneview.genometracks import BAMCoverageTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\n\ncov = BAMCoverageTrack(filepath=\"alignments.bam\", type=\"fill\", col=\"#4CAF50\")\naxes = plot_tracks([GenomeAxisTrack(), cov],\n                   region=GenomicInterval(\"chr7\", 26_500_000, 26_800_000), figsize=(14, 4))\n```\n\n![genome_tracks_bam_coverage.png](./examples/figures/genome_tracks_bam_coverage.png)\n\n#### VCFTrack — Variant display\n\nDisplay SNPs and other variants from a VCF/BCF file as colored rectangles, with custom coloring by alt allele or quality:\n\n```python\nfrom geneview.genometracks import VCFTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\n\ntracks = [\n    GenomeAxisTrack(),\n    VCFTrack(\"sample.vcf.gz\", name=\"SNPs\"),\n]\naxes = plot_tracks(tracks, region=GenomicInterval(\"14\", 66903600, 66905100))\n```\n\n![genome_tracks_vcf_basic.png](./examples/figures/genome_tracks_vcf_basic.png)\n\n#### Custom read coloring (color_fn)\n\nColor each read individually using a callback function — useful for coloring by insert size, mapping quality, or as a gray backdrop for variant display:\n\n```python\nfrom geneview.genometracks import AlignmentsTrack\n\n# Color by insert size\ndef color_by_insert_size(read):\n    isize = abs(read.template_length)\n    if isize \u003c 100 or isize \u003e 1500:\n        return \"red\"\n    if isize \u003e 550:\n        return \"blue\"\n    return \"green\"\n\naln = AlignmentsTrack(\"paired_end.bam\", type=\"pileup\", is_paired=True,\n                      color_fn=color_by_insert_size)\n```\n\n![genome_tracks_color_by_insert.png](./examples/figures/genome_tracks_color_by_insert.png)\n\n#### DetailsAnnotationTrack — Annotation with detail panels\n\nExtend AnnotationTrack with detail panels below features:\n\n```python\nfrom geneview.genometracks import DetailsAnnotationTrack, GenomeAxisTrack, GenomicInterval, plot_tracks\nimport pandas as pd\n\ndata = pd.DataFrame({\n    \"chrom\": [\"chr7\"] * 3, \"start\": [1000, 2000, 3000],\n    \"end\": [1500, 2800, 3600], \"name\": [\"geneA\", \"geneB\", \"geneC\"],\n})\ntrack = DetailsAnnotationTrack(data, name=\"Details\")\naxes = plot_tracks([GenomeAxisTrack(), track],\n                   region=GenomicInterval(\"chr7\", 800, 4000), figsize=(12, 4))\n```\n\n![genome_tracks_details_default.png](./examples/figures/genome_tracks_details_default.png)\n\n#### Extended DataTrack plot types\n\nDataTrack supports additional plot types: average (`\"a\"`), confidence interval (`\"confint\"`), LOWESS smooth (`\"smooth\"`), horizon plot (`\"horizon\"`), grid (`\"g\"`), regression (`\"r\"`), and composite types:\n\n```python\nfrom geneview.genometracks import DataTrack\n\n# Composite: boxplot + average + grid\ndtrack = DataTrack(data, type=[\"boxplot\", \"a\", \"g\"], name=\"Composite\")\n```\n\n![genome_tracks_data_composite.png](./examples/figures/genome_tracks_data_composite.png)\n\n#### Color schemes\n\nApply predefined color schemes to gene and annotation tracks:\n\n```python\naxes = plot_tracks([grtrack], region=region, scheme=\"genes\")\n```\n\n![genome_tracks_scheme_genes.png](./examples/figures/genome_tracks_scheme_genes.png)\n\n#### Export tracks\n\nExport track data to BED, GFF, bedGraph, or WIG format:\n\n```python\nfrom geneview.genometracks import export_tracks\nexport_tracks(track, \"output.bed\", fmt=\"bed\")\n```\n\n### Karyotype plot\n\n**Karyotype** plots display cytogenetic bands with standard G-banding stain colors.\n\n```python\nimport matplotlib.pyplot as plt\nimport geneview as gv\n\nk_fn = gv.load_dataset(\"karyotype_human_hg19.txt\")\nfig, ax = plt.subplots(figsize=(20, 5))\n_ = gv.karyoplot(k_fn, ax=ax)\nplt.show()\n```\n\n## Documentation\n\nComprehensive documentation is available:\n\n- [User Guide](./docs/user_guide.md) — Overview of all features with examples\n- [Plot Styles](./docs/user_guide.md#plot-styles) — Journal-compliant figure styles (Nature, Science, Cell)\n- [Genome Tracks Guide](./docs/genome_tracks_guide.md) — Detailed guide for the genome tracks module\n- [Tutorial Notebooks](./docs/tutorial/) — Jupyter notebooks for GWAS, Venn, Admixture, Palettes, Genome Tracks, and Plot Styles\n- [API Reference](./docs/user_guide.md#api-reference) — Function and class reference\n\n## Dependencies\n\n**Geneview** supports Python 3.8+ and requires the following packages:\n\n- [numpy](http://www.numpy.org/)\n- [scipy](http://www.scipy.org/)\n- [pandas](http://pandas.pydata.org/)\n- [matplotlib](http://matplotlib.org/)\n- [seaborn](https://seaborn.pydata.org/)\n\nOptional dependencies for genome tracks (BigWig, BAM, CRAM support):\n\n```bash\npip install geneview[genometracks]  # installs pyranges, pyBigWig, pysam\n```\n\n## Citation\n\nIf you use **geneview** in your research, please cite:\n\n\u003e Huang, S. geneview: A python package for visualizing genomics data. https://github.com/ShujiaHuang/geneview\n\n## License\n\nReleased under a [GPL-3.0 license](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FShujiaHuang%2Fgeneview","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FShujiaHuang%2Fgeneview","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FShujiaHuang%2Fgeneview/lists"}