[gmx-users] ramachandran plot
Tsjerk Wassenaar
tsjerkw at gmail.com
Mon Nov 17 13:55:19 CET 2014
Hi Urszula,
Save the following as kde2d.r and make it executable. Then you can run
./kde2d.r rama.dat rama.png
Cheers,
Tsjerk
####kde2d.r####
#!/usr/bin/env Rscript
# Script for drawing 2D combined linear/circular KDE plots.
#
# (c)2014 Tsjerk A. Wassenaar
# Friedrich-Alexander University of Erlangen-Nuremberg
args <- commandArgs()
args <- args[-(1:match("--args", args))]
# MASS library is needed for bandwidths
require(MASS)
# This 2D circular KDE function was developed for correct handling
# of bivariate angular data as part of the orientational analysis
# used with DAFT (Manuscript submitted).
kde2d <- function (x, y, h, n = 25, xlim, ylim, circular=TRUE, phase=0)
{
if (length(y) != length(x))
stop("data vectors must be the same length")
n <- rep(n, length.out = 2L)
phase <- rep(phase, length.out = 2L)
circular <- rep(circular, length.out = 2L)
s <- which(!is.na(x) | !is.na(y))
x <- x[s]
y <- y[s]
nx <- length(x)
if (any(!is.finite(x)) || any(!is.finite(y)))
stop("missing or infinite values in the data are not allowed")
if (circular[1])
x <- (x+180)%%360-180
if (circular[2])
y <- (y+180)%%360-180
if (missing(xlim))
xlim <- if (circular[1]) c(-180,180) else range(x)
if (missing(ylim))
ylim <- if (circular[2]) c(-180,180) else range(y)
if (any(!is.finite(c(xlim,ylim))))
stop("only finite values are allowed in 'xlim' and 'ylim'")
h <- if (missing(h))
c(bandwidth.nrd(x), bandwidth.nrd(y))
else rep(h, length.out = 2L)
if (any(h <= 0))
stop("bandwidths must be strictly positive")
h <- h/4
if (circular[1])
{
gx <- seq.int(-180, 180, length.out = n[1L])
ax <- ((outer(gx, x-phase[1], "-")+180)%%360-180)/h[1L]
gx <- gx + phase[1]
}
else
{
gx <- seq.int(xlim[1], xlim[2], length.out = n[1L])
ax <- outer(gx, x, "-")/h[1L]
}
if (circular[2])
{
gy <- seq.int(-180, 180, length.out = n[2L])
ay <- ((outer(gy, y-phase[2], "-")+180)%%360-180)/h[2L]
gy <- gy + phase[2]
}
else
{
gy <- seq.int(ylim[1], ylim[2], length.out = n[2L])
ay <- outer(gy, y, "-")/h[2L]
}
z <- tcrossprod(matrix(dnorm(ax), , nx), matrix(dnorm(ay), , nx))/(nx *
h[1L] * h[2L])
list(x = gx, y = gy, z = z)
}
# Color gradients for coloring density plots
rng <- seq(0,1,length.out=100)
white2red <- rgb(1,rev(rng),rev(rng))
blue2white <- rgb(rng,rng,1)
# Rainbow
magenta2red <- rgb(1,0,rev(rng))
red2yellow <- rgb(1,rng,0)
yellow2green <- rgb(rev(rng),1,0)
green2cyan <- rgb(0,1,rng)
cyan2blue <- rgb(0,rev(rng),1)
red2orange <- rgb(1,0.5*rng,0)
orange2yellow <- rgb(1,0.5+0.5*rng,0)
data <- read.table(args[1])
d <- kde2d(data[,1],data[,2])
## Plotting density images
# Here the density images are prepared and written to file. The first one
(WT) is explained in detail:
#---Start of image---
# Wildtype
# Start a 1200x1200 png file, with a font size (for labels) of 40 points
# Changing the resolution requires changing the font size to keep the
relative size.
png(
args[2],
width=1200,
height=1200,
pointsize=40
)
# Write an image of the density for WT
image(
d$x, d$y, d$z, # Image data X/Y and intensity (Z)
zlim=c(0,max(d$z)), # Limits for coloring
xlab=expression(phi), # X-label text. expression(beta) gives the greek
character
ylab=expression(psi), # Y-label text.
main="", # Main title. Can be set to "" to suppress title.
bty="n", # Surrounding box type. To draw a thicker box,
the box is here suppressed, using "n" for None.
col=c(white2red,red2orange,orange2yellow)
)
box(lwd=3) # Add a box with a thicker line. Change this to
match the resolution of the imge.
# Add points
points(data[,1], data[,2], pch=".", cex=1)
# Add contour lines
contour(
d$x, d$y, d$z,
zlim=c(0,max(d$z)),
add=TRUE, # If add=FALSE (default), then 'contour' starts
a new plot.
labels="", # Suppress labels on contour lines
labcex=0.001, # To avoid gaps in the controu lines (because of
the empty label), set the label size very small
nlevels=20, # Number of lines to draw, between range of
'zlim'
lwd=3 # Width of contour lines. Set to 3 to match png
resolution. Change when changing the resolution.
)
# Close the image file, saving it.
dev.off()
#---End of image---
On Mon, Nov 17, 2014 at 1:44 PM, Urszula Uciechowska <
urszula.uciechowska at biotech.ug.edu.pl> wrote:
> Dear Tsjerk,
>
> Could you send me the script again? as I did not find the attachment in
> your previous email.
>
> best regards
> Urszula
>
>
> > Hi Urszula,
> >
> > Attached is an R script for drawing 2D circular or combined
> > circular/linear
> > KDEs. It works as a command line script, taking as arguments a file with
> > 2-column data, and an output image file name (./kde2d.r input.dat
> > output.png). It's pretty easy to adapt to suit your needs, even if you
> > don't know R specifically. I wrote the routine for a manuscript we just
> > submitted, where the method is explained in some detail, and if you like
> > the images and care to use it for publications, I would be obliged if you
> > could reference that paper ("High-Throughput Simulations of Dimer and
> > Trimer Assembly of Membrane Proteins. The DAFT approach."). If you run
> > into
> > problems or have further questions, please let me know.
> >
> > Cheers,
> >
> > Tsjerk
> >
> > On Fri, Nov 14, 2014 at 4:31 PM, Urszula Uciechowska <
> > urszula.uciechowska at biotech.ug.edu.pl> wrote:
> >
> >> Could you please send me the code? It can be on my private email.
> >>
> >> Thanks a lot
> >>
> >> Ursuzla
> >>
> >> > Hi Urszula,
> >> >
> >> > It's a while ago that I made that one, and I don't have the code at
> >> hand.
> >> > But it's a combination of a density plot (kde2d) with the points laid
> >> > over,
> >> > and a polygon to highlight the forbidden region. These days I'm doing
> >> > circular 2D KDEs, whic is more correct. I can send the R code for thay
> >> if
> >> > you want.
> >> >
> >> > Best,
> >> >
> >> > Tsjerk
> >> > On Nov 14, 2014 12:34 PM, "Urszula Uciechowska" <
> >> > urszula.uciechowska at biotech.ug.edu.pl> wrote:
> >> >
> >> >> Dear Gromacs users,
> >> >>
> >> >> I generated the ramachandran plot and would like to colour it in
> >> xmgrace
> >> >> as it was shown in tutorial:
> >> >> http://nmr.chem.uu.nl/~adrien/course/molmod/analysis2.html
> >> >>
> >> >> Does anyone know how to do it?
> >> >>
> >> >> Best regards
> >> >> Urszula Uciechowska
> >> >>
> >> >>
> >> >>
> >> >>
> >> >> -----------------------------------------
> >> >> Ta wiadomość została wysłana z serwera Uniwersytetu Gdańskiego
> >> >> http://www.ug.edu.pl/
> >> >>
> >> >> --
> >> >> Gromacs Users mailing list
> >> >>
> >> >> * Please search the archive at
> >> >> http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> >> >> posting!
> >> >>
> >> >> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> >> >>
> >> >> * For (un)subscribe requests visit
> >> >> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users
> or
> >> >> send a mail to gmx-users-request at gromacs.org.
> >> >>
> >> > --
> >> > Gromacs Users mailing list
> >> >
> >> > * Please search the archive at
> >> > http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> >> > posting!
> >> >
> >> > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> >> >
> >> > * For (un)subscribe requests visit
> >> > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> >> send
> >> > a mail to gmx-users-request at gromacs.org.
> >> >
> >>
> >>
> >> University of Gdansk and Medical Univesity of Gdansk
> >> Department of Molecular and Cellular Biology
> >> ul. Kladki 24
> >> 80-822 Gdansk
> >> Poland
> >>
> >>
> >> -----------------------------------------
> >> Ta wiadomość została wysłana z serwera Uniwersytetu Gdańskiego
> >> http://www.ug.edu.pl/
> >>
> >> --
> >> Gromacs Users mailing list
> >>
> >> * Please search the archive at
> >> http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> >> posting!
> >>
> >> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> >>
> >> * For (un)subscribe requests visit
> >> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> >> send a mail to gmx-users-request at gromacs.org.
> >>
> >
> >
> >
> > --
> > Tsjerk A. Wassenaar, Ph.D.
> > --
> > Gromacs Users mailing list
> >
> > * Please search the archive at
> > http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> > posting!
> >
> > * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
> >
> > * For (un)subscribe requests visit
> > https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> send
> > a mail to gmx-users-request at gromacs.org.
> >
>
>
> University of Gdansk and Medical Univesity of Gdansk
> Department of Molecular and Cellular Biology
> ul. Kladki 24
> 80-822 Gdansk
> Poland
>
>
> -----------------------------------------
> Ta wiadomość została wysłana z serwera Uniwersytetu Gdańskiego
> http://www.ug.edu.pl/
>
> --
> Gromacs Users mailing list
>
> * Please search the archive at
> http://www.gromacs.org/Support/Mailing_Lists/GMX-Users_List before
> posting!
>
> * Can't post? Read http://www.gromacs.org/Support/Mailing_Lists
>
> * For (un)subscribe requests visit
> https://maillist.sys.kth.se/mailman/listinfo/gromacs.org_gmx-users or
> send a mail to gmx-users-request at gromacs.org.
>
--
Tsjerk A. Wassenaar, Ph.D.
More information about the gromacs.org_gmx-users
mailing list