Reputation: 5742
I have some sequence feature information I want to visualize. Here is some toy data(the specific r code to regenerate the data is at the end)
type index variable position
...
14 CDS 14 start 31129
15 exon 15 start 32196
16 CDS 16 start 32196
17 stop_codon 17 start 32247
18 exon 1 end 12166
19 CDS 2 end 12166
...
The command I used to generate the following plot is
qplot(position,type,data=m2data,color=type)+xlim(11950,15000)
But I want to add the line segments between "start" and "end" that share the same "index" like following, which I made with the paint.
How can I achieve this with ggplot2 in R?
The following is the data
m2data<-structure(list(type = structure(c(2L, 1L, 3L, 2L, 1L, 2L, 1L,
4L, 2L, 2L, 1L, 3L, 2L, 1L, 2L, 1L, 4L, 2L, 1L, 3L, 2L, 1L, 2L,
1L, 4L, 2L, 2L, 1L, 3L, 2L, 1L, 2L, 1L, 4L), class = "factor", .Label = c("CDS",
"exon", "start_codon", "stop_codon")), index = c("1", "2", "3",
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15",
"16", "17", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10",
"11", "12", "13", "14", "15", "16", "17"), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
2L), .Label = c("start", "end"), class = "factor"), position= c(11955L,
12026L, 12026L, 16677L, 16677L, 17745L, 17745L, 17787L, 18309L,
28587L, 28658L, 28658L, 31129L, 31129L, 32196L, 32196L, 32247L,
12166L, 12166L, 12028L, 16841L, 16841L, 17814L, 17786L, 17789L,
18898L, 28798L, 28798L, 28660L, 31299L, 31299L, 32270L, 32246L,
32249L)), .Names = c("type", "index", "variable", "position"), row.names = c(NA,
-34L), class = "data.frame")
Upvotes: 2
Views: 3992
Reputation: 14667
Here is a solution to your problem. Although your question is quite similar to a previous one, I think that providing an answer specific to your data set is still useful.
library(ggplot2)
library(reshape2)
# Use dcast (in reshape2 package) to create separate columns for start and end.
dat = dcast(m2data, type + index ~ variable, value.var="position")
plot_1 = ggplot(dat, aes(x=start, xend=end, y=type, yend=type, colour=type)) +
geom_segment(size=3) +
geom_point(size=3) +
geom_point(aes(x=end), size=3)
ggsave(filename="plot_1.png", plot_1, width=10, height=2.5)
Upvotes: 8