【问题标题】:How to add a line through two points on scatter plot and remove axis scales?如何通过散点图上的两个点添加一条线并删除轴刻度?
【发布时间】:2016-01-21 22:30:49
【问题描述】:

我有以下数据:

> dput(all_data)
structure(list(X = structure(1:8, .Label = c("DMU 1", "DMU 2", 
"DMU 3", "DMU 4", "DMU 5", "DMU 6", "DMU 7", "DMU 8"), class = "factor"), 
    x = c(7L, 13L, 7L, 18L, 12L, 14L, 10L, 16L), y = c(7L, 5L, 
    3L, 5L, 9L, 14L, 3L, 10L)), .Names = c("X", "x", "y"), class = "data.frame", row.names = c(NA, 
-8L))

还有下图:

plot(all_data[,2], all_data[,3], ylim = c(0, 20), xlim = c(0,20),
     xlab = "Input", ylab = "Output")
text(all_data[,2], all_data[,3], labels = all_data[,1], cex = 0.7, pos = 4)

我试图在不抄袭的情况下复制此图:

它足够接近,但我在通过 DMU 1 和 DMU 6 的点添加线时遇到问题。

我还想删除轴刻度,因为该图仅用于概念的图形表示,不测量任何内容。 任何其他可能有助于在美学上改善它的添加都值得赞赏。

【问题讨论】:

  • 熟悉?par 了解基本绘图参数

标签: r plot lines


【解决方案1】:

这几乎可以满足您的需求。您可以根据需要更改abline()colorlinetype。感谢@thelatemail,我已经编辑了子集和拟合线性模型的方法。

plot(all_data[,2], all_data[,3], ylim = c(0, 20), xlim = c(0,20), xlab = "Input", ylab = "Output", xaxt='n', yaxt='n')
text(all_data[,2], all_data[,3], labels = all_data[,1], cex = 0.7, pos = 4)
abline(lm(y~x, data=all_data, subset=X %in% c("DMU 1","DMU 6") ))
arrows(x0=5, y0=15, x1 = 10, y1 = 10, length = 0.10, angle = 20,
        code = 2, col = par("fg"), lty = par("lty"),
        lwd = par("lwd"))
text(6, 15.5, "Efficient Frontier", cex = .8)

【讨论】:

  • 并删除 dplyr 依赖和选择/过滤的需要 - lm 有一个 subset= 参数 - lm(y~x, data=all_data, subset=X %in% c("DMU 1","DMU 6") )
  • 另外,您的abline 调用不使用lm 调用的结果 - 目前根本不使用它。
  • @thelatemail,感谢您关注我;我从摘要中获取截距和斜率,但更容易将其添加到 abline() 表达式中。
  • 感谢所有帮助。看起来不错。我正计划在箭头中使用 Photoshop 哈哈。谢谢!
【解决方案2】:
all_data <- structure(list(X = structure(1:8, .Label = c("DMU 1", "DMU 2","DMU 3", "DMU 4", "DMU 5", "DMU 6", "DMU 7", "DMU 8"), class = "factor"), 
                           x = c(7L, 13L, 7L, 18L, 12L, 14L, 10L, 16L),
                           y = c(7L, 5L, 3L, 5L, 9L, 14L, 3L, 10L)),
                      .Names = c("X", "x", "y"),
                      class = "data.frame", row.names = c(NA,-8L))

with(all_data, {
  par(family = 'serif')
  plot(x, y, xlim = c(0,20), ylim = c(0,20), pch = 16, bty = 'l',
       xaxt = 'n', yaxt = 'n', ann = FALSE)
  text(x, y, labels = parse(text = gsub('(....)(.)', 'italic(\\1[\\2])', X)),
       adj = c(0, 1.5))
  abline(0, 1, lty = 2)
  p <- par('usr')
  text(c(p[1], p[2], 10), c(p[4], p[3], p[4]), xpd = NA, adj = c(1.5, 1.5),
       labels = c('output','input', 'Efficient frontier'))
  arrows(7, 18, 10, 11, length = .1)
  mtext('Figure 1: Efficient frontier - CCR model.', font = 3,
        side = 1, line = 3, at = 2)
})

【讨论】:

  • 您的版本与我请求帮助的图表完全一致。也很容易应用于我需要的其他图表。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 2018-02-22
  • 1970-01-01
相关资源
最近更新 更多