Question: MSnbase annotate m/z values on mass spectrum plots
gravatar for garfield320
6 months ago by
garfield32020 wrote:


I'm new to MSnbase package and am trying to plot MS2 spectra with each peaks annotated with their m/z values.

I followed the examples from the MSnbase document as below.

rawdata <- readMSData("filename", msLevel = 2)
sp <- rawdata[which.max(peaksCount(rawdata))]
plot(sp, full = TRUE)

This gives me a plot of intensity vs. M/Z. I read in the documentation that plot function can annotate fragment ions by matching it to a peptide sequence, but I'm wondering if I can annotate each of these peaks with their M/Z values instead of their IDs, to make sure all peaks that weren't matched to some reference still show their M/Z values. In addition, it would also be useful if I can annotate M/Z values of ten peaks that have highest intensities. I'm aware that I can use mz(rawdata) to get a list of M/Zs but just wondering if there are ways to plot them using functions supported in the MSnbase package. Any advice would be greatly appreciated!

msnbase • 174 views
ADD COMMENTlink modified 6 months ago by Laurent Gatto1.1k • written 6 months ago by garfield32020
Answer: MSnbase annotate m/z values on mass spectrum plots
gravatar for Laurent Gatto
6 months ago by
Laurent Gatto1.1k
United Kingdom
Laurent Gatto1.1k wrote:

You can add a sequence (as a character) to plot to automatically annotate the plot. Below I have sp, an object of class Spectrum, and its sequence s:

> sp
Object of class "Spectrum2"
 Precursor: 641.3205 
 Retention time: 30:2 
 Charge: 2 
 MSn level: 2 
 Peaks count: 121 
 Total ion count: 58841315 
> s
> plot(sp, s, main = s)

See for an example plot.

It is them possible to add annotations manually with

## get the spectrum as a data.frame
> spdf <- as(sp, 'data.frame')
## hand-annotate the 13th peak with
> text(spdf[13, "mz"], spdf[13 ,"i"], "hello")
ADD COMMENTlink written 6 months ago by Laurent Gatto1.1k

I initially asked this question because I don't have any sequence information that can be matched to the spectrum, and the code you put as an example (plot(sp, s, main = s)) seemed like it specifically required a sequence-like object for it to work. However, your getting the spectrum into a data frame inspired me to come up with what I wanted, so thank you for pointing that out! I'm posting the code I used in case anyone in the future needs this.

> sp
Object of class "Spectrum2"
 Precursor: 452.2279 
 Retention time: 11:8 
 Charge: 1 
 MSn level: 2 
 Peaks count: 234 
 Total ion count: 17796.33 

> spdf <- as(sp, 'data.frame')
> plot(spdf$mz, spdf$i, type = 'h')
> spdf.order <- spdf[order(-spdf$i), ]
> max <- spdf.order[1:10,]
> with(spdf, plot(spdf$mz, spdf$i, type='h'))
> text(max$mz, max$i, labels = round(max$mz, 3))
ADD REPLYlink written 6 months ago by garfield32020
Please log in to add an answer.


Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 16.09
Traffic: 242 users visited in the last hour