在数据帧上的plot()之后运行points()

时间:2018-04-12 01:25:35

标签: r plot

我是R的新手,想要在现有情节上绘制特定点。我正在使用swiss数据框,我通过plot(swiss)函数可视化。 enter image description here 在此之后,想要添加Mahalanobis距离给出的异常值:

mu_hat <- apply(swiss, 2, mean); sigma_hat <- cov(swiss)
mahalanobis_distance <- mahalanobis(swiss, mu_hat, sigma_hat) 
outliers <- swiss[names(mahalanobis_distance[mahalanobis_distance > 10]),]
points(outliers, pch = 'x', col = 'red')

但是这最后一行没有效果,因为离群点不会添加到上一个图中。我看到如果对一对变量重复这个过程,比如说

plot(swiss[2:3])
points(outliers[2:3], pch = 'x', col = 'red')

将红点添加到图中。 enter image description here 问:对points()函数如何用于多变量数据框有什么限制吗?

2 个答案:

答案 0 :(得分:2)

这是使用GGally::ggpairs的解决方案。它有点难看,因为我们需要修改ggally_points函数来指定所需的颜色方案。

我认为mu_hat = colMeans(swiss)sigma_hat = cov(swiss)

library(dplyr)
library(GGally)

swiss %>% 
  bind_cols(distance = mahalanobis(swiss, colMeans(swiss), cov(swiss))) %>%
  mutate(is_outlier = ifelse(distance > 10, "yes", "no")) %>%
  ggpairs(columns = 1:6, 
          mapping = aes(color = is_outlier), 
          upper = list(continuous = function(data, mapping, ...) {
            ggally_points(data = data, mapping = mapping) +
              scale_colour_manual(values = c("black", "red"))
          }), 
          lower = list(continuous = function(data, mapping, ...) {
            ggally_points(data = data, mapping = mapping) + 
              scale_colour_manual(values = c("black", "red"))
          }),
          axisLabels = "internal")

enter image description here

答案 1 :(得分:-1)

不幸的是,你现在正在做的事情是不可能的。在绘制数据框时,R会生成许多图并对齐它们。您实际看到的是6乘6 = 36个单独的地块,它们都已经对齐,看起来不错。

当您使用dots命令时,它会告诉它将点放在当前图上。当你有36个情节时,这真的没有意义,至少不是你想要它的方式。

ggplot是R中非常强大的工具,它提供了更强的可燃性。例如,您可以设置数据框以包含您的异常值,但将它们标记为“异常值”并将其放置在您已设置为构面的每个图中。您探索的越多,您可能会发现有更好的情节也适合您的需求。

在基础R中绘制数据框是一个很好的探索工具。您可以将这些异常值设置为单独的数据帧并绘制它,以便您可以并排查看每个6乘6的图并进行比较。这一切都取决于你的目标。如果您的目标是按照您的描述完全生产,ggplot2包将帮助您创建更专业的东西。正如@Gregor在评论中建议的那样,从ggpairs包中查找函数GGally将是一个很好的起点。

快速谷歌图片搜索显示一些类似于你所追求的,然后一些的时髦情节! enter image description here

Find it here