Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.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 如何使散点图中的趋势线与x轴的边界相关?_R_Plot_Trendline - Fatal编程技术网

R 如何使散点图中的趋势线与x轴的边界相关?

R 如何使散点图中的趋势线与x轴的边界相关?,r,plot,trendline,R,Plot,Trendline,我正在创建一个绘图,其中我在X轴上绘制变量,与Y轴上的变量相对,我也在添加变量的直方图。我已使用abline()将趋势线添加到绘图中 问题在于,它似乎不尊重绘图区域中的xlim=c(0,20),因为它超出了x轴的限制。我尝试过使用xpd选项,但没有效果。接下来,我尝试摆弄不同的par()选项,但没有发现任何有助于解决此问题的方法 我想要的是趋势线是x轴的精确长度。非常感谢您的帮助。在这个特殊的情况下,趋势线几乎是平的,但是当我对其他变量做同样的操作时,斜率会改变 MWE——注意:我只提供了15

我正在创建一个绘图,其中我在X轴上绘制变量,与Y轴上的变量相对,我也在添加变量的直方图。我已使用
abline()
将趋势线添加到绘图中

问题在于,它似乎不尊重绘图区域中的
xlim=c(0,20)
,因为它超出了x轴的限制。我尝试过使用
xpd
选项,但没有效果。接下来,我尝试摆弄不同的
par()
选项,但没有发现任何有助于解决此问题的方法

我想要的是趋势线是x轴的精确长度。非常感谢您的帮助。在这个特殊的情况下,趋势线几乎是平的,但是当我对其他变量做同样的操作时,斜率会改变

MWE——注意:我只提供了15个数据点来说明这个问题,因此图表将与提供的图像不同

df.data <- data.frame(id = 1:15,
                      ll = c(-9.53026, -6.50640,-6.50640, -7.68535, -11.80899, -8.42790,
                             -6.50640, -6.50640, -7.92405, -6.50640, -8.95522, -9.99228,
                             -10.02286, -8.95969, -6.07313),
                      aspm = c(4.582104, 0.490244, 0.737765, 0.256699, 1.575931, 1.062693,
                               1.006984, 0.590355, 1.014370, 0.924855, 0.735989, 0.831025,
                               1.197886, 1.143220, 0.928068))

str.col.light.blue <- c(rgb(r = 110/255, g = 155/255, b = 225/255))
str.col.dark.blue <- c(rgb(r = 50/255, g = 100/255, b = 185/255))

layout(matrix(c(2, 4, 1, 3), 2, 2, byrow = TRUE), widths = c(5, 2), heights = c(2, 5))
layout.show(4)

par(omi = c(0.1, 0.1, 0.1, 0.1))
par(mar = c(2, 2, 0, 0))
par(mai = c(1, 1, 0, 0))

plot(df.data[, "ll"] ~ df.data[, "aspm"], col  = str.col.light.blue,
    xlim = c(0, 20), ylim = c(-15, -5), axes = FALSE,
    xlab = "X1", ylab = "X2",
    cex.lab = 1.25)

abline(a = -8.156670, b = -0.000879, lty = 5, col = "black", lwd = 2, xpd = FALSE)

axis(1, at = seq(0, 20, by = 5), labels = seq(0, 20, by = 5), cex.axis = 1)
axis(2, at = seq(-15, -5, by = 3), labels = seq(-15, -5, by = 3), cex.axis = 1, las = 1)

rect(0, -15, 20, log(1/3)*8, density = 10, angle = 45, lwd = 0.5, col = "gray")

par(mar = c(0, 2, 0, 0))
par(mai = c(0, 1, 0.25, 0))

x.hist <- hist(df.data[, "aspm"], plot = FALSE, breaks = 20)
barplot(x.hist$density, axes = FALSE, horiz = FALSE, space = 0, col = str.col.dark.blue)

par(mar = c(2, 0, 0, 0))
par(mai = c(1, 0, 0, 0.25))

y.hist <- hist(df.data[, "ll"], plot = FALSE, breaks = 20) 
barplot(y.hist$density, axes = FALSE, horiz = TRUE, space = 0, col = str.col.dark.blue)

df.data为了避免计算线段的起点和终点,您可以编写一个助手函数来完成这项工作

linear <- function(x, a, b) a + b*x
segment
的调用放在
abline
所在的位置。

在最后一个图形中,我看到一个行为良好的段。

命令
par(mfg)
抛出一个错误,
par中的错误(mfg=c(0,0,0,0)):为图形参数“mfg”指定的值无效。
。至于这个问题,也许您可以使用
而不是
abline
?您是对的,
par(mfg)
确实抛出了一个错误。当我创建MWE时,它没有,但是当我在一个干净的会话中运行它时,它做到了。它似乎没有任何可见的效果,所以我编辑了MWE并删除了这一行。至于使用
段()
——这是可能的。然而,它确实需要我计算出线路的起点和终点。现在趋势线是平的很容易,但是当坡度发生变化时,需要我重新计算起点和终点,这会有点麻烦,因为我正在为趋势线创建几个具有不同坡度的图形。太棒了!出色地解决了这个问题。
x0 <- 0
y0 <- linear(x0, a = -8.156670, b = -0.000879)
x1 <- 20
y1 <- linear(x1, a = -8.156670, b = -0.000879)

segments(x0, y0, x1, y1, lty = 5, col = "black", lwd = 2, xpd = FALSE)