2016-06-28 10 views
0

多くの行を描画するgeomggplot2に作成しようとしています。しかし、私の問題は、描かれた線が正確ではないということです。ここに私の問題の簡単な説明があります。これは、線を引く必要がありますgeom_line1と呼ばれる新しいGEOMあるggplot2で新しいgeomを作成するときのデータのスケール方法は?

GeomLine1 <- ggproto("GeomLine1", Geom, 
         required_aes = c('x','y'), 
         default_aes = aes(colour = "black"), 
         draw_key = draw_key_abline, 

         draw_panel = function(data, panel_scales, coord) { 

          grid::linesGrob(x=data$x,y=data$y,default.units = 'native')} 
) 

geom_line1 <- function(mapping = NULL, data = NULL, stat = "identity", 
          position = "identity", na.rm = FALSE, show.legend = NA, 
          inherit.aes = TRUE, ...) { 
     layer(
      geom = GeomLine1, mapping = mapping, data = data, stat = stat, 
      position = position, show.legend = show.legend, inherit.aes = inherit.aes, 
      params = list(na.rm = na.rm, ...) 
    ) 
} 

この例を考えてみましょう。このコードの

dat <- data.frame(x = c(0,10), y = c(0,10)) 

ggplot(dat,aes(x,y))+geom_line1() + geom_point() 

出力が

enter image description here

であるあなたは、ラインがその位置にポイントを越えて延びている見ることができます。私がデフォルト機能geom_lineを使用すれば、それは完璧です。私のコードで何が間違っていますか?また、誰かが新しいgeomsを書くための良いチュートリアルを提案できるなら、それは素晴らしいことでしょう。

ggplot(dat,aes(x,y))+geom_line() + geom_point() 

enter image description here

+0

[チュートリアル](http://docs.ggplot2.org/dev/vignettes/extending-ggplot2.html)する必要があります。 – Axeman

+0

@Axeman私は運がないことを読んだ。ありがとう – Koundy

+0

'geom_line1'と' geom_line'のソースを比較しましたか? – Axeman

答えて

0

私は問題を把握するために管理します。実際には、このようなデータを変換し、プロットするために変換されたデータを使用する必要があります。

coords <- coord$transform(data, panel_scales) 
grid::linesGrob(x=coords$x,y=coords$y,default.units = 'native') 

代わりのdata$xdata$y我々はCOORDSの$ xとCOORDS $ yを

関連する問題