Color: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
(arguments)
 
(17 intermediate revisions by 8 users not shown)
Line 1: Line 1:
===DESCRIPTION===
'''color''' sets the color of an object or an atom selection to a predefined, named color, an RGB hex color, or a color [[ramp_new|ramp]].
'''color''' changes the color of an object or an atom selection. For a script that enumerates all the colors see, [[List_Colors]].
For an overview of predefined colors, see [[Color Values]].
===USAGE===
For a script that enumerates all the colors see, [[List_Colors]].
If you want to define your own colors, see [[Set_Color]].
 
== Usage ==
 
<source lang="python">
<source lang="python">
color color-name
color color-name
Line 8: Line 12:
</source>
</source>


===PYMOL API===
== Arguments ==
<source lang="python">cmd.color( string color, string selection )</source>
 
* color-name = str or int: [[Color Values|named color]], index of a named color, <code>0xRRGGBB</code> string, <code>0x40RRGGBB</code> integer, name of a [[ramp_new|ramp]] object, or special value <code>atomic</code>
* object-name = str: Name of an object or name pattern (with Asterisk (<code>*</code>)) which matches multiple objects. Changes the [[set_object_color|object color]], and if it is a molecular object, also the color of all atoms. {default: all}
* selection = str: [[Selection Algebra|atom selection]], this is any expression which is not a valid object pattern. E.g. an expression which starts with a parentheses. This will only color atoms, not objects.


==Using RGB for Color==
== Examples ==
If you prefer RGB to color any object
<source lang="python">
set_color newcolor, [r,g,b]
color newcolor
</source>
List of [[Color Values]]


==EXAMPLES==
===Color all carbons yellow===
===Color all carbons yellow===
<source lang="python">color yellow, (name C*)</source>
<source lang="python">color yellow, (name C*)</source>


===RGB Example===
=== Color by element, except carbons ===
<source lang="python">
 
set_color khaki, [195,176,145]
color atomic, (not elem C)
color khaki
 
</source>
=== Use a custom RGB color ===
 
color 0x006600


===Color by Spectrum Example===
===Color by Spectrum Example===
Color by spectrum is in the GUI menu but did you realize that the spectrum is not limited to a simple rainbow?
Color by spectrum is in the GUI menu but did you realize that the spectrum is not limited to a simple rainbow?
<source lang="python">
<source lang="python">
spectrum count, x, object_name
spectrum count, palette, object_name
</source>
</source>
x can can be anyone of the following:
 
blue_green, green_white_magenta, red_cyan, blue_magenta, green_white_red, red_green, blue_red, green_white_yellow, red_white_blue, blue_white_green, green_yellow, red_white_cyan, blue_white_magenta, green_yellow_red, red_white_green, blue_white_red, magenta_blue, red_white_yellow, blue_white_yellow, magenta_cyan, red_yellow, blue_yellow, magenta_green, red_yellow_green, cbmr, magenta_white_blue, rmbc, cyan_magenta, magenta_white_cyan, yellow_blue, cyan_red, magenta_white_green, yellow_cyan, cyan_white_magenta, magenta_white_yellow, yellow_cyan_white, cyan_white_red,  magenta_yellow, yellow_green, cyan_white_yellow, rainbow, yellow_magenta, cyan_yellow, rainbow2, yellow_red, gcbmry, rainbow2_rev, yellow_white_blue, green_blue, rainbow_cycle, yellow_white_green, green_magenta, rainbow_cycle_rev, yellow_white_magenta, green_red, rainbow_rev, yellow_white_red, green_white_blue, red_blue, yrmbcg
For available palettes and more details see: [[spectrum]]


===B-Factors===
===B-Factors===
The command to color a molecule by B-Factors (B Factors) is:
The command to color a molecule by B-Factors (B Factors) is:
<source lang="python">
<source lang="python">
cmd.spectrum("b", selection="SEL");
spectrum b, selection=SEL
</source>
</source>
where '''SEL''' is a valid selection, for example, "protA and n. CA", for protein A's alpha carbons.
where '''SEL''' is a valid selection, for example, "protA and n. CA", for protein A's alpha carbons.


You can choose the spectrum you want with the command:
For more details see: [[spectrum]]
<source lang="python">
cmd.spectrum("b", 'rainbow', selection="SEL");
</source>
 
where '''rainbow''' is a valid selection from the list:
<pre>
  blue_green            green_white_magenta  red_cyan           
  blue_magenta          green_white_red      red_green         
  blue_red              green_white_yellow    red_white_blue     
  blue_white_green      green_yellow          red_white_cyan     
  blue_white_magenta    green_yellow_red      red_white_green   
  blue_white_red        magenta_blue          red_white_yellow   
  blue_white_yellow    magenta_cyan          red_yellow         
  blue_yellow          magenta_green        red_yellow_green   
  cbmr                  magenta_white_blue    rmbc               
  cyan_magenta          magenta_white_cyan    yellow_blue       
  cyan_red              magenta_white_green  yellow_cyan       
  cyan_white_magenta    magenta_white_yellow  yellow_cyan_white 
  cyan_white_red        magenta_yellow        yellow_green       
  cyan_white_yellow    rainbow              yellow_magenta     
  cyan_yellow          rainbow2              yellow_red         
  gcbmry                rainbow2_rev          yellow_white_blue 
  green_blue            rainbow_cycle        yellow_white_green 
  green_magenta        rainbow_cycle_rev    yellow_white_magenta
  green_red            rainbow_rev          yellow_white_red   
  green_white_blue      red_blue              yrmbcg
</pre>


====Reassigning B-Factors and Coloring====
====Reassigning B-Factors and Coloring====
Line 108: Line 83:


A script (data2bfactor.py) that loads data into the B-factor (b) or occupancy (q) columns from an external file can be found in Robert Campbell's PyMOL script repository (http://pldserver1.biochem.queensu.ca/~rlc/work/pymol/)
A script (data2bfactor.py) that loads data into the B-factor (b) or occupancy (q) columns from an external file can be found in Robert Campbell's PyMOL script repository (http://pldserver1.biochem.queensu.ca/~rlc/work/pymol/)
====Reassigning B-Factors and Coloring - from file ====
<source lang="python">
reinitialize
prot="1XYZ"
cmd.fetch(prot,async=0)
# Set b value to zero
cmd.alter(prot,b=0.0)
cmd.show_as("cartoon",prot)
python
inFile = open("phi_values.txt", 'r')
val_list = []
for line in inFile.readlines()[1:]:
    split = line.split()
    resn = split[0][0]
    resi = split[0][1:-1]
    phi_ppm2 = float(split[1])
    phi_ppm2_err = float(split[3])
    R2_0 = float(split[4])
    R2_0_err = float(split[6])
    print "Resn=%s Resi=%s, phi_ppm2=%2.2f, phi_ppm2_err=%2.2f, R2_0=%2.2f, R2_0_err=%2.2f"%(resn,resi,phi_ppm2,phi_ppm2_err,R2_0,R2_0_err)
    val_list.append(phi_ppm2)
    cmd.alter("%s and resi %s and n. CA"%(prot,resi), "b=%s"%phi_ppm2)
python end
minval = min(val_list)
print minval
maxval = max(val_list)
print maxval
cmd.spectrum("b", "blue_white_red", "%s and n. CA"%prot, minimum=0, maximum=maxval)
cmd.ramp_new("ramp_obj", prot, range=[0, minval, maxval], color="[blue, white, red ]")
cmd.save("%s_newBFactors.pdb"%prot, "%s"%prot)
</source>


=== Expanding to Surface ===
=== Expanding to Surface ===
See [[Expand_To_Surface]].
If you have run the above code and would like the colors to be shown in the [[Surface]] representation, too, then you need to do the following:
If you have run the above code and would like the colors to be shown in the [[Surface]] representation, too, then you need to do the following:
<source lang="python">
<source lang="python">
Line 123: Line 136:
<source lang="python">
<source lang="python">
stored.list = []
stored.list = []
iterate all, stored.list.append(color)
iterate all, stored.list.append(color) # use cmd.get_color_tuple(color) to convert color index to RGB values
print stored.list
print stored.list
</source>
</source>
Line 132: Line 145:
</source>
</source>


=== What colors does PyMOL currently have? ===
basic colors can be manually accessed and edited from the PyMOL menu under '''Setting''' --> '''Colors...'''<br>
At the Pymol prompt, you can use the command [[Get Color Indices]] to get a list of Pymols named colors.<br>
[[Get_colors]] is a script that allows accessing colors as well.<br>


=== Color States Individually ===
=== Color States Individually ===
Line 160: Line 177:
</source>
</source>


[[Category:Objects_and_Selections]]
== See Also ==
[[Category:Commands|color]]
 
* [[Advanced Coloring]]
* [[Get Color Indices]]
* [[spectrum]]
* [[Ramp_New]]
 
[[Category:Objects_and_Selections|Color]]
[[Category:Commands|Color]]
[[Category:States|Coloring states individually]]
[[Category:States|Coloring states individually]]
[[Category:Coloring|Color]]

Latest revision as of 11:21, 24 October 2019

color sets the color of an object or an atom selection to a predefined, named color, an RGB hex color, or a color ramp. For an overview of predefined colors, see Color Values. For a script that enumerates all the colors see, List_Colors. If you want to define your own colors, see Set_Color.

Usage

color color-name
color color-name, object-name
color color-name, (selection)

Arguments

  • color-name = str or int: named color, index of a named color, 0xRRGGBB string, 0x40RRGGBB integer, name of a ramp object, or special value atomic
  • object-name = str: Name of an object or name pattern (with Asterisk (*)) which matches multiple objects. Changes the object color, and if it is a molecular object, also the color of all atoms. {default: all}
  • selection = str: atom selection, this is any expression which is not a valid object pattern. E.g. an expression which starts with a parentheses. This will only color atoms, not objects.

Examples

Color all carbons yellow

color yellow, (name C*)

Color by element, except carbons

color atomic, (not elem C)

Use a custom RGB color

color 0x006600

Color by Spectrum Example

Color by spectrum is in the GUI menu but did you realize that the spectrum is not limited to a simple rainbow?

spectrum count, palette, object_name

For available palettes and more details see: spectrum

B-Factors

The command to color a molecule by B-Factors (B Factors) is:

spectrum b, selection=SEL

where SEL is a valid selection, for example, "protA and n. CA", for protein A's alpha carbons.

For more details see: spectrum

Reassigning B-Factors and Coloring

It is commonplace to replace the B-Factor column of a protein with some other biochemical property at that residue, observed from some calculation or experiment. PyMOL can easily reassign the B-Factors and color them, too. The following example will load a protein, set ALL it's B Factors to "0", read in a list of properties for each alpha carbon in the proteins, assign those new values as the B-Factor values and color by the new values. This example is possible because commands PyMOL does not recognize are passed to the Python interpreter --- a very powerful tool.

# load the protein
cmd.load("protA.pdb")

# open the file of new values (just 1 column of numbers, one for each alpha carbon)
inFile = open("newBFactors", 'r')

# create the global, stored array
stored.newB = []

# read the new B factors from file
for line in inFile.readlines(): stored.newB.append( float(line) )

# close the input file
inFile.close()

# clear out the old B Factors
alter protA, b=0.0

# update the B Factors with new properties
alter protA and n. CA, b=stored.newB.pop(0)

# color the protein based on the new B Factors of the alpha carbons
cmd.spectrum("b", "protA and n. CA")

If you want to save the file with the new B Factor values for each alpha carbon,

cmd.save("protA_newBFactors.pdb", "protA")

or similar is all you need.

A script (data2bfactor.py) that loads data into the B-factor (b) or occupancy (q) columns from an external file can be found in Robert Campbell's PyMOL script repository (http://pldserver1.biochem.queensu.ca/~rlc/work/pymol/)

Reassigning B-Factors and Coloring - from file

reinitialize
prot="1XYZ"
cmd.fetch(prot,async=0)

# Set b value to zero
cmd.alter(prot,b=0.0)
cmd.show_as("cartoon",prot)

python
inFile = open("phi_values.txt", 'r')
val_list = []
for line in inFile.readlines()[1:]:
    split = line.split()
    resn = split[0][0] 
    resi = split[0][1:-1]
    phi_ppm2 = float(split[1])
    phi_ppm2_err = float(split[3])
    R2_0 = float(split[4])
    R2_0_err = float(split[6])
    print "Resn=%s Resi=%s, phi_ppm2=%2.2f, phi_ppm2_err=%2.2f, R2_0=%2.2f, R2_0_err=%2.2f"%(resn,resi,phi_ppm2,phi_ppm2_err,R2_0,R2_0_err)

    val_list.append(phi_ppm2)
    cmd.alter("%s and resi %s and n. CA"%(prot,resi), "b=%s"%phi_ppm2)

python end
minval = min(val_list)
print minval
maxval = max(val_list)
print maxval
cmd.spectrum("b", "blue_white_red", "%s and n. CA"%prot, minimum=0, maximum=maxval)
cmd.ramp_new("ramp_obj", prot, range=[0, minval, maxval], color="[blue, white, red ]")
cmd.save("%s_newBFactors.pdb"%prot, "%s"%prot)

Expanding to Surface

See Expand_To_Surface.

If you have run the above code and would like the colors to be shown in the Surface representation, too, then you need to do the following:

# Assumes alpha carbons colored from above.
create ca_obj, your-object-name and name ca 
ramp_new ramp_obj, ca_obj, [0, 10], [-1, -1, 0]
set surface_color, ramp_obj, your-object-name

Thanks to Warren, for this one.

Getting Atom Colors

stored.list = []
iterate all, stored.list.append(color) # use cmd.get_color_tuple(color) to convert color index to RGB values
print stored.list

Or, you can label each atom by it's color code:

label all, color

What colors does PyMOL currently have?

basic colors can be manually accessed and edited from the PyMOL menu under Setting --> Colors...
At the Pymol prompt, you can use the command Get Color Indices to get a list of Pymols named colors.
Get_colors is a script that allows accessing colors as well.

Color States Individually

fetch 1nmr
set all_states

# the object has 20 states, so we can set separate line colors
# for each state as follows:
for a in range(1,21): cmd.set("line_color","auto","1nmr",a)

Or, we can do it differently,

# start over,
fetch 1nmr

# break apart the object by state
split_states 1nmr

# delete the original
dele 1nmr

# and color by object (carbons only)
util.color_objs("elem c")

# (all atoms)
util.color_objs("all")

See Also