2

これが私のプロットです

dat <- data.frame(
  pos = c(1, 3, 5, 8, 10, 12),
  start = c(1,3, 6, 7, 10, 11),
  end = c(5, 6, 9, 9, 13, 12)
)

library(ggplot2)
p <- ggplot(dat) + geom_segment(aes(x=start, y=pos, xend=end, yend=pos), 
       color="blue", size=2) + ylab("Fragments)") +  xlab("Position")
    scale_y_reverse() + theme_bw()

p1 <- p + opts(legend.position="left",
        panel.background=theme_blank(),panel.border=theme_blank(),
        panel.grid.major=theme_blank(),
        panel.grid.minor=theme_blank(),plot.background=theme_blank())


p1

ここに画像の説明を入力

ビットマップ化された目的のバージョンは、セグメントの近くに軸線とラベルがあります。[追記:ビットマップが行を丸め終わりに変更したことに注意してください(ggplot2でできるかどうかを確認するのは興味深いでしょう)]

ここに画像の説明を入力

4

2 に答える 2

4

興味深いことに、これはベース グラフィックスの方が簡単だと思います。

plot(c(0,13),c(1,12),type = "n",axes = FALSE,xlab = "Position",ylab = "")
segments(x0 = dat$start,
         y0 = dat$pos,
         x1 = dat$end,
         y1 = dat$pos,
         col = "blue",
         lwd = 6,
         lend = 2)
text(x = dat$start - 0.5,y = dat$pos,labels = dat$pos,font = 2)
axis(1)
axis(1,at = c(0,12),labels = FALSE,tcl = 0.5)

編集axis両方向で最も外側の目盛りを取得する追加の呼び出しを追加しました。

ここに画像の説明を入力

于 2012-05-03T15:25:11.107 に答える
3

編集:ggplot2バージョン 0.9.3.1のコードを更新しています。

ggplot2 の最近のバージョンでは、タスクがはるかに簡単になります。次のコードはそれをすべて行います。

# Load required packages
library(ggplot2)

# Your data
dat <- data.frame(
  pos = c(1, 3, 5, 8, 10, 12),
  start = c(1,3, 6, 7, 10, 11),
  end = c(5, 6, 9, 9, 13, 12) )

# Get the  plot
p <- ggplot(dat) + 
   geom_segment(aes(x=start, y=pos, xend=end, yend=pos), 
         color="blue", size=2, lineend = "round") + 
   ylab("Fragments") +  xlab("Position") + 
   theme_bw() +
   geom_text(aes(label = pos, x = start, y = pos), hjust = 1.7) +
   scale_x_continuous(breaks = seq(0,14,2), labels = seq(0,14,2), expand = c(0,0)) +
   scale_y_continuous(limits = c(-1, 14), expand = c(0,0))  +
   geom_hline(yintercept = -1) +
   geom_segment(aes(x = 0, y = -1, xend = 0, yend = -0.9)) +
   geom_segment(aes(x = 14, y = -1, xend = 14, yend = -0.9)) +
   theme(panel.grid.major=element_blank(),
       panel.grid.minor=element_blank(),
       panel.border=element_blank(),
       axis.ticks.y = element_blank(), 
       axis.title.y = element_blank(),
       axis.text.y = element_blank())
p

元の答え:

ggplot2少しいじるだけで、 で実行できます。grid()y 軸の目盛りを削除するには、パッケージの関数が必要です。

# Load required packages
library(ggplot2)
library(grid)

# Your data
dat <- data.frame(
  pos = c(1, 3, 5, 8, 10, 12),
  start = c(1,3, 6, 7, 10, 11),
  end = c(5, 6, 9, 9, 13, 12) )

# Get the base plot
p <- ggplot(dat) + 
   geom_segment(aes(x=start, y=pos, xend=end, yend=pos), 
   color="blue", size=2) + ylab("Fragments") +  xlab("Position") + theme_bw() +
   geom_text(aes(label = pos, x = start, y = pos), hjust = 1.7) +
   scale_x_continuous(breaks = seq(0,14,2), labels = seq(0,14,2), expand = c(0,0)) +
   scale_y_continuous(limits = c(-1, 14), expand = c(0,0))  +
   geom_hline(yintercept = -1) +
   geom_segment(aes(x = 0, y = -1, xend = 0, yend = -0.9)) +
   geom_segment(aes(x = 14, y = -1, xend = 14, yend = -0.9)) +
   opts(panel.grid.major=theme_blank(),
       panel.grid.minor=theme_blank(),
       panel.border=theme_blank(),
       axis.title.y = theme_blank(),
       axis.text.y = theme_blank())
p

# Remove the y-axis tick marks
g <- ggplotGrob(p)# Save plot as a grob
#grid.ls(g) 
grid.remove(grid.get("axis.ticks", grep=T, global = TRUE)[[1]]$name)

結果:

ここに画像の説明を入力

さらにいじることで、線分の端を丸くすることができます。protoパッケージをインストールする必要があります。次に、ここから取得したコードを実行しgeom_segment2て、「行末」引数を取る新しい geomを使用できるようにします。

    # To create the new `geom_segment2`
library(proto)
GeomSegment2 <- proto(ggplot2:::GeomSegment, {
 objname <- "geom_segment2"
 draw <- function(., data, scales, coordinates, arrow=NULL, ...) {
   if (is.linear(coordinates)) {
     return(with(coord_transform(coordinates, data, scales),
       segmentsGrob(x, y, xend, yend, default.units="native",
       gp = gpar(col=alpha(colour, alpha), lwd=size * .pt,
         lty=linetype, lineend = "round"),
       arrow = arrow)
     ))
   }

}})

geom_segment2 <- function(mapping = NULL, data = NULL, stat =
"identity", position = "identity", arrow = NULL, ...)  {
  GeomSegment2$new(mapping = mapping, data = data, stat = stat,
        position = position, arrow = arrow, ...)
} 

    # The base plot
p <- ggplot(dat) + 
       geom_segment2(aes(x=start, y=pos, xend=end, yend=pos), 
       color="blue", size=2, lineend = "round") + ylab("Fragments") +  xlab("Position") + theme_bw() +
       geom_text(aes(label = pos, x = start, y = pos), hjust = 1.7) +
       scale_x_continuous(breaks = seq(0,14,2), labels = seq(0,14,2), expand = c(0,0)) +
       scale_y_continuous(limits = c(-1, 14), expand = c(0,0))  +
       geom_hline(yintercept = -1) +
       geom_segment(aes(x = 0, y = -1, xend = 0, yend = -0.9)) +
       geom_segment(aes(x = 14, y = -1, xend = 14, yend = -0.9)) +
       opts(panel.grid.major=theme_blank(),
           panel.grid.minor=theme_blank(),
           panel.border=theme_blank(),
           axis.title.y = theme_blank(),
           axis.text.y = theme_blank())
p

## Remove the y-axis tick marks
g <- ggplotGrob(p)
#grid.ls(g) 
grid.remove(grid.get("axis.ticks", grep=T, global = TRUE)[[1]]$name)

結果:

ここに画像の説明を入力

于 2012-05-04T22:30:01.687 に答える