继续功能到轴的极限

时间:2016-02-23 11:56:26

标签: r ggplot2

我使用VOUCHER_NO VOUCHER_DATE FROM TO DR CR BALANCE INTEREST -------------------------------------------------------------------------------------------------------- 1 01-01-2016 PARTY A JOBWORK 10000.00 -10000.00 2 05-01-2016 CASH PARTY A 5000.00 -5000.00 NEED INTEREST OF 10000.00 HERE 3 15-01-2016 CASH PARTY A 4000.00 -1000.00 NEED INTEREST OF 5000.00 HERE 绘制一些函数。我想在y轴上添加一个限制,但曲线将在实际限制之前停止。我怀疑ggplot将计算曲线上的一些点并插入其余的点,但如果下一个点高于限制,它将被省略。是否有可能强制ggplot实际绘制曲线到极限? 这样一条曲线的问题是,看起来曲线有意地在那里结束了。

以下是一个例子:

stat_function

the cut of curve

1 个答案:

答案 0 :(得分:2)

您遇到的问题是stat_y_continuous()只是忽略超出指定范围的值。由于位于y = 1000下方的最后一个点对于每条曲线的y值没有相同的值,因此它们不会以相同的y值结束。

有几种方法可以解决这个问题,具体取决于您的实际需求。一种可能性是使用coord_cartesian()而不是scale_y_continuous()。这将保留所有值,并简单地切断坐标轴:

p + stat_function(fun=radius, aes(color="10"), args=list(s=10)) +
    stat_function(fun=radius, aes(color="20"), args=list(s=20)) +
    stat_function(fun=radius, aes(color="30"), args=list(s=30)) +
    stat_function(fun=radius, aes(color="40"), args=list(s=40)) +
    coord_cartesian(ylim = c(0, 1000))

enter image description here

如您所见,这将绘制到曲线,直到它们到达绘图区域的上限范围。

如果您确实希望曲线以y = 1000结束,则可以在stat_function中绘制更多分数。这仍然意味着曲线不会完全以y = 1000结束,但它们将如此接近该极限,以至于差异不再可见:

p + stat_function(fun=radius, aes(color="10"), args=list(s=10), n = 2000) +
  stat_function(fun=radius, aes(color="20"), args=list(s=20), n = 2000) +
  stat_function(fun=radius, aes(color="30"), args=list(s=30), n = 2000) +
  stat_function(fun=radius, aes(color="40"), args=list(s=40), n = 2000) +
  scale_y_continuous(limits = c(0, 1000))

enter image description here