什么是使用 R 制作散点图的好方法,通过处理来分离数据?

机器算法验证 r 数据可视化 散点图
2022-01-21 02:48:27

一般来说,我对 R 和统计数据非常陌生,但我需要制作一个我认为可能超出其原生能力的散点图。

我有几个观察向量,我想用它们做一个散点图,每一对都属于三类之一。我想制作一个散点图,按颜色或符号分隔每个类别。我认为这比生成三个不同的散点图要好。

我还有另一个问题,即在每个类别中,都有一个大集群,但一组中的集群比其他两组大。

有谁知道这样做的好方法?我应该安装并学习如何使用的软件包?有人做过类似的事情吗?

谢谢

3个回答

大簇:如果叠印是一个问题,您可以使用较低的 alpha,因此单点是暗淡的,但叠印会产生更强烈的颜色。或者您切换到二维直方图或密度估计。

require ("ggplot2")
  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, colour = Species)) + stat_density2d ()
    密度
    你可能想要面对这个......

  • ggplot (iris, aes (x = Sepal.Length, y = Sepal.Width, fill = Species)) + stat_binhex (bins=5, aes (alpha = ..count..)) + facet_grid (. ~ Species)
    六边形
    虽然你也可以在没有方面的情况下制作这个情节,但物种的打印顺序会影响最终的画面。

  • 如果你愿意让你的手有点脏(=解释和代码的链接)并计算六边形的混合颜色,你可以避免这种情况: 在此处输入图像描述

  • 另一个有用的事情是对高密度区域使用 (hex)bins,并为其他部分绘制单点:

    ggplot (df, aes (x = date, y = t5)) + 
      stat_binhex (data = df [df$t5 <= 0.5,], bins = nrow (df) / 250) +
          geom_point (data = df [df$t5 > 0.5,], aes (col = type), shape = 3) +
      scale_fill_gradient (low = "#AAAAFF", high = "#000080") +
      scale_colour_manual ("response type", 
        values = c (normal = "black", timeout = "red")) + 
      ylab ("t / s")
    

    在此处输入图像描述


为了绘图包的完整性,我还要提一下lattice

require ("lattice")
  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length | Species, iris, pch= 20)</code>

  • xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length, iris, groups = iris$Species, pch= 20)</code>

  • xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)
    <code>xyplot(Sepal.Width ~ Sepal.Length | Species, iris, groups = iris$Species, pch= 20)</code>

这是“鸢尾花”数据集的经典问题之一。这是基于该数据集和 R 代码的一整套绘图项目的链接,您可能能够适应您的问题。

这是一种使用基础 R 而不是附加包的方法。

plot(iris$Petal.Length, iris$Petal.Width, pch=21, 
     bg=c("red","green3","blue")[unclass(iris$Species)], 
     main="Edgar Anderson's Iris Data")

这产生了这个数字:

在此处输入图像描述

从那里开始,根据您的情节,您可以开始处理 alpha/透明度级别以允许过度绘图等,但我会先从一个非常基本的图表开始构建。

虽然有很多理由坚持使用 base R,但其他软件包简化了绘图。通过显着特征分离数据是ggplot2lattice包的优势之一。ggplot2 制作特别具有视觉吸引力的情节。@cbeleites在答案中演示了这两个软件包。

或者使用ggplot2:

ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width, colour = Species)) + geom_point()
ggplot(iris, aes(x = Sepal.Length, y = Sepal.Width)) + geom_point() + facet_grid(~Species)

哪个生产

在此处输入图像描述

在此处输入图像描述