Circular plot in ggplot2 with line segments connected in r
ggplot2, r
Solution
Here is an example:
filld$p <- rowMeans(subset(filld, select = c(start, end)))
ggplot(filld, aes(xmin = start, xmax = end, ymin = 4, ymax = 5, fill = label)) +
geom_rect() +
geom_segment(data = subset(filld, label %in% label[duplicated(label)]),
aes(x = p, y = 0, xend = p, yend = 4, colour = label),
size = 2, show_guide = FALSE) +
geom_text(aes(x = p, y = 4.5, label = label), colour = "white", size = 10) +
coord_polar() +
scale_y_continuous(limits = c(0, 5))
Updated
I do not recommend but something like this:
filld <- data.frame (start = c(1, 4, 6, 7.5, 8, 9), end = c(4, 6, 7.5, 8, 9, 10),
label = c("A", "B", "C", "A", "C", "D"))
filld$p <- rowMeans(subset(filld, select = c(start, end)))
filld <- merge(filld, ddply(filld, .(label), summarize, p2 = mean(p)))
lnd <- subset(filld, label %in% label[duplicated(label)])
lnd <- ddply(lnd, .(label), function(x) {
x <- seq(x$p[1], x$p[2], length = 100)
y <- 4.5 + ((x - mean(x))^2 - (x[1]-mean(x))^2) / (x[1]-mean(x))^2 * 3 + sin(x*3*pi) * 0.1
data.frame(x, y)
})
p <- ggplot(filld, aes(xmin = start, xmax = end, ymin = 4, ymax = 5, colour = label, fill = label)) +
geom_line(aes(x, y, xmin = NULL, ymin = NULL, xmax = NULL, ymax = NULL), data = lnd, size = 2) +
geom_rect() +
geom_text(aes(x = p, y = 4.5, label = label), colour = "white", size = 10) +
coord_polar() +
scale_y_continuous(limits = c(0, 5))
p
Perhaps, what you want is beyond the scope of ggplot2.
Problem
I am trying to create a circular plot and am stuck at a point: ``` dat1 <- data.frame (xvar = 1:10, y = 6, ymin = 4, ymax = 4.5) ``` Using this data, I can produce a circular ribbon plot in ggplot2 ``` require(ggplot2) ggplot(dat1, aes(x=xvar, y=y)) + geom_ribbon(aes(ymin=ymin, ymax=ymax), col = "blue", fill = "blue2") + ylim (c(0,6)) + coord_polar() ``` However I want more. I want to fill the segment of the ribbon with different colors and labels using the following data. ``` filld <- data.frame (start = c(1, 4, 6, 7.5, 8, 9), end = c(4, 6, 7.5, 8, 9, 10), label = c("A", "B", "C", "A", "C", "D")) filld ## start end label ## 1 1.0 4.0 A ## 2 4.0 6.0 B ## 3 6.0 7.5 C ## 4 7.5 8.0 A ## 5 8.0 9.0 C ## 6 9.0 10.0 D ``` The ribbon will be filled with different color by label variable. For example, the segment A will start from 1 and end at 4. Then segment B will start and end at 6 and filled with different color. Segments with same label (such as A and C) will be connected by line. The resulting plot will look like this: