Opened 3 years ago

Closed 3 years ago

#7563 closed enhancement (fixed)

Improve labels' contrast with background

Reported by: Tony Schaefer Owned by: Eric Pettersen
Priority: normal Milestone:
Component: Depiction Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Windows-10-10.0.22000
ChimeraX Version: 1.4 (2022-06-03 23:39:42 UTC)
Description
really just a very minor improvement suggestion

I think the default 3D label text color (black/white) could be slightly improved. There are some guidelines out there for web pages to select a text color that contrasts well with a particular background color. ChimeraX's current formula for determining if a label should be black or white uses the background color. It weights the red, green, and blue channels equally. 

I use a formula released by the W3 group a while ago whenever I need a to determine if black or white contrasts more. The code for that is here: https://github.com/QChASM/SEQCROW/blob/be1ff418d86bcfccc76d2e4b1b6765c32f56fb0a/src/utils.py#L6     Basically, the formula accounts for blue generally being darker than red and red being darker than green. As is often the case with standards, I'm sure there are many other methods for determining if black text or white text should be used. I guess APCA is another one. 

In the attached pictures of periodic tables, the text is colored using the foruma in SEQCROW (W3) and the ChimeraX one for 3D atom labels (sum(element_color[:3]) > 1.5 * 255). To my eyes, the W3 formula is not perfect, but it is generally better than the ChimeraX colors. To some extent, what looks better depends on your monitor and personal preference. However, I think most people will say that black text looks better than white on a green (#00ff00) background. 

All that being said, I think most people stick to reasonable background colors, so the current formula is probably fine. 

Log:
> cd C:\Users\ajs99778/Desktop

Current working directory is: C:\Users\ajs99778\Desktop  

> graphics selection width 4

UCSF ChimeraX version: 1.4 (2022-06-03)  
© 2016-2022 Regents of the University of California. All rights reserved.  
How to cite UCSF ChimeraX  

> open C:\Users\ajs99778\Desktop\ts-opt-freq.log format log

> ui tool show "Visualize Normal Modes"

Opened ts-opt-freq.log as a Gaussian output file  

> ui tool show "Build QM Input"

> set bgColor rgb(121,121,121)

> label #1 atoms attribute name

Failed to send bug report. Bug report server www.rbvi.ucsf.edu is unavailable  

QMainWindowLayout::tabPosition called with out-of-bounds value '0'  

[Repeated 1 time(s)]

> close #1.3

> close

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> close

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> close

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_001_51914492.xyz"

Opened traj_001_51914492.xyz as an XYZ file  

> coordset slider #1

> close

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_002_51914493.xyz"

Opened traj_002_51914493.xyz as an XYZ file  

> coordset slider #1

> ui mousemode right tsbond

> ui mousemode right bond

> close

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_003_51914494.xyz"

Opened traj_003_51914494.xyz as an XYZ file  

> coordset slider #1

> close

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_004_51914495.xyz"

Opened traj_004_51914495.xyz as an XYZ file  

> coordset slider #1

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_003_51914494.xyz"

Opened traj_003_51914494.xyz as an XYZ file  

> close #2

> close

> open "C:/Users/ajs99778/Desktop/M06 def2-SVP pcm
> hexane/traj_005_51914496.xyz"

Opened traj_005_51914496.xyz as an XYZ file  

> coordset slider #1

> close

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> close

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> rename #1 gas

> rename #2 pcm(hexane)

> hide #!1 models

> ui mousemode right distance

> distance #2/a:1@C10 #2/a:1@H9

Distance between pcm(hexane) #2/a UNK 1 C10 and H9: 1.36Å  

> distance #2/a:1@H9 #2/a:1@C1

Distance between pcm(hexane) #2/a UNK 1 H9 and C1: 1.29Å  

> distance #2/a:1@C5 #2/a:1@C12

Distance between pcm(hexane) #2/a UNK 1 C5 and C12: 3.19Å  

> show #!1 models

> hide #!2 models

> distance #1/a:1@C10 #1/a:1@H9

Distance between gas #1/a UNK 1 C10 and H9: 1.37Å  

> distance #1/a:1@H9 #1/a:1@C1

Distance between gas #1/a UNK 1 H9 and C1: 1.28Å  

> distance #1/a:1@C5 #1/a:1@C12

Distance between gas #1/a UNK 1 C5 and C12: 3.21Å  

> show #!2 models

> tile

3 models tiled  

> ui mousemode right tsbond

> tsbond #1/a:1@C10 #1/a:1@H9 radius 0.160

> tsbond #1/a:1@C1#1/a:1@H9

> tsbond #2/a:1@C10#2/a:1@H9

> tsbond #2/a:1@C1#2/a:1@H9

> ui mousemode right distance

> distance #2/a:1@C10 #2/a:1@C1

Distance between pcm(hexane) #2/a UNK 1 C10 and C1: 2.59Å  

> distance #1/a:1@C10 #1/a:1@C1

Distance between gas #1/a UNK 1 C10 and C1: 2.58Å  

> close #3#1-2

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> close

> open asdf.xyz

Opened asdf.xyz as an XYZ file  

> set bgColor color rgb(126,126,126)

Invalid "bgColor" argument: Invalid color name or specifier  

> set bgColor rgb(126,126,126)

> set bgColor #7e7e7e00

> label #1 atoms attribute name

> set bgColor rgb(128,128,128)

> set bgColor #80808000

> set bgColor rgb(126,126,126)

> set bgColor #7e7e7e00

> set bgColor white

> set bgColor #ffffff00

> set bgColor black

> set bgColor transparent

> set bgColor rgb(126,126,126)

> set bgColor #7e7e7e00

> set bgColor rgb(0,255,0)

> set bgColor #00ff0000

> set bgColor rgb(0,0,255)

> set bgColor #0000ff00

> close #1

> ui tool show Shell




OpenGL version: 3.3.0 - Build 30.0.101.1002
OpenGL renderer: Intel(R) UHD Graphics 770
OpenGL vendor: Intel

Python: 3.9.11
Locale: en_US.cp1252
Qt version: PyQt6 6.3.0, Qt 6.3.0
Qt runtime version: 6.3.0
Qt platform: windows

Manufacturer: Dell Inc.
Model: OptiPlex 7000
OS: Microsoft Windows 11 Enterprise (Build 22000)
Memory: 16,853,479,424
MaxProcessMemory: 137,438,953,344
CPU: 20 12th Gen Intel(R) Core(TM) i7-12700
OSLanguage: en-US

Installed Packages:
    alabaster: 0.7.12
    appdirs: 1.4.4
    Babel: 2.10.1
    backcall: 0.2.0
    blockdiag: 3.0.0
    certifi: 2022.5.18.1
    cftime: 1.6.0
    charset-normalizer: 2.0.12
    ChimeraX-AddCharge: 1.2.3
    ChimeraX-AddH: 2.1.11
    ChimeraX-AlignmentAlgorithms: 2.0
    ChimeraX-AlignmentHdrs: 3.2.1
    ChimeraX-AlignmentMatrices: 2.0
    ChimeraX-Alignments: 2.4.3
    ChimeraX-AlphaFold: 1.0
    ChimeraX-AltlocExplorer: 1.0.2
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Arrays: 1.0
    ChimeraX-Atomic: 1.39.1
    ChimeraX-AtomicLibrary: 7.0
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.1
    ChimeraX-BasicActions: 1.1
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 2.1.1
    ChimeraX-BondRot: 2.0
    ChimeraX-BugReporter: 1.0
    ChimeraX-BuildStructure: 2.7
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.1
    ChimeraX-ButtonPanel: 1.0
    ChimeraX-CageBuilder: 1.0
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.2
    ChimeraX-ChemGroup: 2.0
    ChimeraX-Clashes: 2.2.4
    ChimeraX-ColorActions: 1.0
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.1
    ChimeraX-CommandLine: 1.2.3
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0
    ChimeraX-Core: 1.4
    ChimeraX-CoreFormats: 1.1
    ChimeraX-coulombic: 1.3.2
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0
    ChimeraX-DataFormats: 1.2.2
    ChimeraX-Dicom: 1.1
    ChimeraX-DistMonitor: 1.1.5
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ExperimentalCommands: 1.0
    ChimeraX-FileHistory: 1.0
    ChimeraX-FunctionKey: 1.0
    ChimeraX-Geometry: 1.2
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.1
    ChimeraX-Hbonds: 2.1.2
    ChimeraX-Help: 1.2
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.1
    ChimeraX-ItemsInspection: 1.0
    ChimeraX-Label: 1.1.1
    ChimeraX-ListInfo: 1.1.1
    ChimeraX-Log: 1.1.5
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.8.1
    ChimeraX-Map: 1.1
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0
    ChimeraX-MapFilter: 2.0
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1
    ChimeraX-Markers: 1.0
    ChimeraX-Mask: 1.0
    ChimeraX-MatchMaker: 2.0.6
    ChimeraX-MDcrds: 2.6
    ChimeraX-MedicalToolbar: 1.0.1
    ChimeraX-Meeting: 1.0
    ChimeraX-MLP: 1.1
    ChimeraX-mmCIF: 2.7
    ChimeraX-MMTF: 2.1
    ChimeraX-Modeller: 1.5.5
    ChimeraX-ModelPanel: 1.3.2
    ChimeraX-ModelSeries: 1.0
    ChimeraX-Mol2: 2.0
    ChimeraX-Morph: 1.0
    ChimeraX-MouseModes: 1.1
    ChimeraX-Movie: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nucleotides: 2.0.2
    ChimeraX-OpenCommand: 1.9
    ChimeraX-PDB: 2.6.6
    ChimeraX-PDBBio: 1.0
    ChimeraX-PDBLibrary: 1.0.2
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1
    ChimeraX-PubChem: 2.1
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1
    ChimeraX-RemoteControl: 1.0
    ChimeraX-ResidueFit: 1.0
    ChimeraX-RestServer: 1.1
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 2.0.1
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.6
    ChimeraX-Shape: 1.0.1
    ChimeraX-Shell: 1.0
    ChimeraX-Shortcuts: 1.1
    ChimeraX-ShowAttr: 1.0
    ChimeraX-ShowSequences: 1.0
    ChimeraX-SideView: 1.0
    ChimeraX-Smiles: 2.1
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.8
    ChimeraX-STL: 1.0
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.0.1
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0
    ChimeraX-SwapAA: 2.0
    ChimeraX-SwapRes: 2.1.1
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.1.1
    ChimeraX-ToolshedUtils: 1.2.1
    ChimeraX-Tug: 1.0
    ChimeraX-UI: 1.18.3
    ChimeraX-uniprot: 2.2
    ChimeraX-UnitCell: 1.0
    ChimeraX-ViewDockX: 1.1.2
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0
    ChimeraX-WebServices: 1.1.0
    ChimeraX-Zone: 1.0
    colorama: 0.4.4
    comtypes: 1.1.10
    cxservices: 1.2
    cycler: 0.11.0
    Cython: 0.29.26
    debugpy: 1.6.0
    decorator: 5.1.1
    docutils: 0.17.1
    entrypoints: 0.4
    filelock: 3.4.2
    fonttools: 4.33.3
    funcparserlib: 1.0.0
    grako: 3.16.5
    h5py: 3.7.0
    html2text: 2020.1.16
    idna: 3.3
    ihm: 0.27
    imagecodecs: 2021.11.20
    imagesize: 1.3.0
    ipykernel: 6.6.1
    ipython: 7.31.1
    ipython-genutils: 0.2.0
    jedi: 0.18.1
    Jinja2: 3.0.3
    jupyter-client: 7.1.0
    jupyter-core: 4.10.0
    kiwisolver: 1.4.2
    line-profiler: 3.4.0
    lxml: 4.7.1
    lz4: 3.1.10
    MarkupSafe: 2.1.1
    matplotlib: 3.5.1
    matplotlib-inline: 0.1.3
    msgpack: 1.0.3
    nest-asyncio: 1.5.5
    netCDF4: 1.5.8
    networkx: 2.6.3
    numexpr: 2.8.1
    numpy: 1.22.1
    openvr: 1.16.802
    packaging: 21.3
    ParmEd: 3.4.3
    parso: 0.8.3
    pickleshare: 0.7.5
    Pillow: 9.0.1
    pip: 21.3.1
    pkginfo: 1.8.2
    prompt-toolkit: 3.0.29
    psutil: 5.9.0
    pycollada: 0.7.2
    pydicom: 2.2.2
    Pygments: 2.11.2
    PyOpenGL: 3.1.5
    PyOpenGL-accelerate: 3.1.5
    pyparsing: 3.0.9
    PyQt6-commercial: 6.3.0
    PyQt6-Qt6: 6.3.0
    PyQt6-sip: 13.3.1
    PyQt6-WebEngine-commercial: 6.3.0
    PyQt6-WebEngine-Qt6: 6.3.0
    python-dateutil: 2.8.2
    pytz: 2022.1
    pywin32: 303
    pyzmq: 23.1.0
    qtconsole: 5.3.0
    QtPy: 2.1.0
    RandomWords: 0.3.0
    requests: 2.27.1
    scipy: 1.7.3
    Send2Trash: 1.8.0
    SEQCROW: 1.5.2
    setuptools: 59.8.0
    sfftk-rw: 0.7.2
    six: 1.16.0
    snowballstemmer: 2.2.0
    sortedcontainers: 2.4.0
    Sphinx: 4.3.2
    sphinx-autodoc-typehints: 1.15.2
    sphinxcontrib-applehelp: 1.0.2
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 1.0.2
    sphinxcontrib-htmlhelp: 2.0.0
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 1.0.3
    sphinxcontrib-serializinghtml: 1.1.5
    suds-community: 1.0.0
    tables: 3.7.0
    tifffile: 2021.11.2
    tinyarray: 1.2.4
    tornado: 6.1
    traitlets: 5.1.1
    urllib3: 1.26.9
    wcwidth: 0.2.5
    webcolors: 1.11.1
    wheel: 0.37.1
    wheel-filename: 1.3.0
    WMI: 1.5.1
File attachment: periodic tables.zip

periodic tables.zip

Attachments (1)

periodic tables.zip (112.6 KB ) - added by Tony Schaefer 3 years ago.
Added by email2trac

Download all attachments as: .zip

Change History (3)

by Tony Schaefer, 3 years ago

Attachment: periodic tables.zip added

Added by email2trac

comment:1 by Eric Pettersen, 3 years ago

Component: UnassignedDepiction
Owner: set to Eric Pettersen
Platform: all
Project: ChimeraX
Status: newaccepted
Summary: ChimeraX bug report submissionImprove labels' contrast with background
Type: defectenhancement

chimerax.core.colors has a more sophisticated function for deciding on the contrast color. I will switch 3D labels to use it.

comment:2 by Eric Pettersen, 3 years ago

Resolution: fixed
Status: acceptedclosed
Note: See TracTickets for help on using tickets.