【问题标题】:Third variable plotting as background density第三个变量绘制为背景密度
【发布时间】:2016-01-12 17:28:03
【问题描述】:

我有一个数据框,其中有两个变量沿 x 轴和 y 轴绘制,作为一个简单的散点图,我想添加第三个变量,但不是获取 z 轴,而是表示将所述 z 变量的点密度作为散点图的背景。我看起来像这样,取自文献:

数据无关紧要,因为我会使用这种绘图的一般方法,但你可以使用这样的东西:

df<-data.frame(IDOBS=c(1:1000),var1=runif(1000,0,30),var2=runif(1000,1500,3000),var3=runif(1000,0.5,1.5))

所以 var1 和 var2 分别作为 x 和 y 变量,背景取决于 var3。

提前感谢您的帮助,

C.

【问题讨论】:

  • 您可以根据 var3 值为各个点着色,但要根据您的要求创建背景颜色,您需要一个表面。您首先需要决定如何将 var3 转换为表面。

标签: r plot scatter


【解决方案1】:

所以显然我错过了这样一个图的名称,它是等高线图或水平图。 lattice 中的一个简单函数可以让你做到这一点。我使用了以下代码,在 this R blog 上找到:

df<-data.frame(x=runif(1000,670,3300),y=runif(1000,2,30),z=runif(1000,0.5,1.5))

gni.loess = loess(z ~ x*y, data = df, degree = 2, span = 0.25)

gni.fit = expand.grid(list(x = seq(670, 3300, 0.1), y = seq(2, 30, 0.1)))

z = predict(gni.loess, newdata = gni.fit)
gni.fit$prod=as.numeric(z)

levelplot(prod ~ x*y, data = gni.fit,
          xlab = "x", ylab = "y",
          main = "z on an x*y grid",
          col.regions = terrain.colors(100)
)

这给出了这样的东西(随机,因为示例中 [x,y] 和 z 之间没有关系):

我仍在尝试在上面添加 y~x 的散点图。

编辑: 带有 ggplot2 的解决方案更易于用于多层图,但为水平图提供了较少定义的边界(即图上 z 值的更连续色谱)。例如,可以通过 geom_point() 添加原始 (x,y) 散点图(与使用 expand.grid 获得的转换值相反)。 另一种可能性,在图形上不太吸引人但更简单,是使用 geom_point() 表达式,如下所示:

p<-ggplot(df,aes(x,y))
p + geom_point(data=df, aes(x,y, color=z))+ scale_colour_gradient(low = "green", high="red")

给予:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-04
    • 2020-09-07
    • 2015-02-20
    • 1970-01-01
    • 2012-05-13
    相关资源
    最近更新 更多