用ggplot

时间:2018-11-11 13:48:47

标签: r ggplot2

基本问题,ggplot似乎并没有达到我的期望。

ggplot(data=data.frame( x=c(-1,2),y=c(-1,2) ), aes(x=x,y=y)) + 
  geom_blank() + 
  geom_abline(slope = -1 , intercept = 1)

我希望这能画出:

enter image description here

正在绘制:

enter image description here

2 个答案:

答案 0 :(得分:10)

ggplot2绘制的图不正确。它在表示要传递给aes调用的数据所必需的刻度上绘制函数。不管您是否实际在geom中绘制数据。

为说明问题,将实际数据点添加到绘图中并使x和y轴更可见是很有帮助的。下面的代码

ggplot(data=data.frame( x=c(-1,2),y=c(-1,2) ), aes(x=x,y=y)) + 
  geom_point(shape = 1) +
  geom_abline(intercept = 1, slope = -1, col = "red") +
  geom_hline(yintercept = 0) +
  geom_vline(xintercept = 0)

为您提供: enter image description here

由于您只想绘制上述图的一个子部分,因此只需更正比例尺即可(而不绘制轴和数据点)。然后,您得到想要的结果:

ggplot(data=data.frame(x=c(-1,2), y=c(-1,2)), aes(x=x,y=y)) + 
  geom_blank() +  # not necessary, taken from the OP's question
  geom_abline(intercept = 1, slope = -1) +
  scale_x_continuous(limits = c(0, 1)) +
  scale_y_continuous(limits = c(0, 1))

enter image description here

答案 1 :(得分:3)

我认为ggplot2确实可以完成您要求的操作:绘制一个空的canvan,其范围从(-1,-1)到(2,2),然后添加一个下斜线。如果要使Canvan与样本匹配,只需调整指定点的坐标即可:

library(tidyverse) 
ggplot(data=data.frame( x=c(0,2),y=c(1,0)), aes(x=x,y=y)) + 
    geom_blank() + 
    geom_abline(slope = -1 , intercept = 1)