Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 无法在绘图中显示长度较小的行_R - Fatal编程技术网

R 无法在绘图中显示长度较小的行

R 无法在绘图中显示长度较小的行,r,R,我无法在绘图中显示小长度的片段 假设以下样本数据: x=c(11,22,33,44,55) y=c(15,23,33,45,57) z=strptime(20120101:20120105,'%Y%m%d') 如果要使用此数据创建线段,则如果需要方形或对接线端点,则第三条记录的线段不会显示。如果我允许我的行尾是圆形的,那么它确实会显示为lend=0 如果我尝试这样做: segments(as.numeric(z),x,as.numeric(z),y,lwd=5,lend=0) 它在33处显示

我无法在绘图中显示小长度的片段

假设以下样本数据:

x=c(11,22,33,44,55)
y=c(15,23,33,45,57)
z=strptime(20120101:20120105,'%Y%m%d')
如果要使用此数据创建线段,则如果需要方形或对接线端点,则第三条记录的线段不会显示。如果我允许我的行尾是圆形的,那么它确实会显示为lend=0

如果我尝试这样做:

segments(as.numeric(z),x,as.numeric(z),y,lwd=5,lend=0)
它在33处显示一个圆圈。有没有办法至少得到一条平的线,它会出现在33码的底部

我会使用我的实际数据,当范围很小时也会这样做,例如33.0005到33.0010,但是数据很大,我希望当它们相同时也能解决小范围的问题

埃塔:如果lwd=15,圆圈看起来更可笑

也许细分市场不是解决这个问题的正确方法


这是烛台图,所以这些数字代表打开和关闭。我还有超出此范围的高和低数值,并在这些段下使用lwd=1绘制。

正如@Joran指出的,这可能是正确的行为

但一个棘手的解决办法是简单地向值中添加任意小的数字。该值应足够小,以不扭曲数据,但应足够大,以在给定绘图设备分辨率的情况下显示在绘图中

delta <- pmax(0.2, y - x)

plot(z,x,type='n')
segments(as.numeric(z),x ,y1 = y + delta, lwd=10, lend=1)

另外,我建议不要这样做。您已收到警告。

鉴于对您的问题所做的编辑,我怀疑进行此操作的方法是绘制点以指示打开和关闭,并绘制一段以指示范围

这样,如果打开点和关闭点相同或闭合,则在正确的点上会得到一个符号

x <- strptime(20120101:20120105,'%Y%m%d')
y1 <- c(11,22,33,44,55)
y2 <- c(15,23,33,45,57)

r <- range(c(y1, y2)) 

plot(c(x, x), c(y1, y2), type="n", xlab="Date", ylab="y")
points(x, y1, pch=18)
points(x, y2, pch=18)
segments(as.numeric(x), y0=y1, y1=y2)

方形线条端点有点奇怪

library(grid)
epsilon <- 1e-4
grid.newpage()
grid.points(x=c(0.5-epsilon,0.5+epsilon), y=c(0.5,0.5), pch="+", gp=gpar(cex=2), def="npc")
grid.segments(0.5-epsilon, 0.5, 0.5+epsilon, 0.5, gp=gpar(lineend="square",lwd=50, alpha=0.2))
grid.segments(0.5-epsilon, 0.5, 0.5+epsilon, 0.5, gp=gpar(lineend="round",lwd=50, alpha=0.2))
grid.segments(0.5-epsilon, 0.5, 0.5+epsilon, 0.5, gp=gpar(lineend="butt",lwd=50, alpha=0.2))

基本图形确实提供了rect。事实上,它做了你想要的。使用上面的定义

xdiff <- max(as.numeric(z)) - min(as.numeric(z))
segwidth <- xdiff/50

plot(z,x,type='n')
rect(z-segwidth/2, x, z+segwidth/2, y, col="black")

1如果你让R画一段长度为0的线段,为什么R会画任何东西?2在您的真实示例中,当然有可能在绘图比例上,0.0005的距离可能低于屏幕的分辨率?我同意,但为什么它会在lend=0时绘制一些东西?可能是因为为了创建这种线条结尾样式,R实际上是在端点处绘制一个填充圆?老实说,我不确定。我想使用分段是错误的方法。尽管上述示例中的记录3的范围为33到33,但实际上在33处出现了一个事件,需要在绘图上显示。也许有一种不同的方法可以做到这一点,就像卡尔在下面提到的箱线图一样。我会调查的。我建议你不要这样做。正如我经常问的:你想解决的问题是什么?也就是说:您希望在图形中显示什么?您要查找的X和Y数据之间是否存在某种潜在关系?当X==Y时是更有趣还是不那么有趣?回答这些问题,你就能知道图表应该强调什么。我也有篡改数据的问题。这部分代表烛台图表的打开和关闭部分。因此,如果我没有在那里放任何东西,那么就不会有当天的开盘/收盘报价信息。我也有不同范围的不同数据集,因此此解决方案还需要更改每组数据的pmax值,尽管这应该不是太大的问题。我希望能有一个干净的方法来做到这一点。也许你会用箱线图得到想要的结果?卡尔,我想试试。@提问者你为什么不在每行的起点和终点画一个符号呢?
grid.newpage()
grid.rect(x=0.5, y=0.5, width=0.01, height=0, gp=gpar(fill="black", col="red", lwd=10, linejoin="mitre"))
xdiff <- max(as.numeric(z)) - min(as.numeric(z))
segwidth <- xdiff/50

plot(z,x,type='n')
rect(z-segwidth/2, x, z+segwidth/2, y, col="black")