我试图复制Coursera R回归模型课程中给出的这个简单示例:
require(datasets)
data(swiss)
require(GGally)
require(ggplot2)
ggpairs(swiss, lower = list(continuous = "smooth", params = c(method = "loess")))
Run Code Online (Sandbox Code Playgroud)
我希望看到一个6x6对图 - 一个散点图,黄土更平滑,瑞士数据中6个变量的每个组合的置信区间.
但是,我收到以下错误:
display_param_error()中的错误:'params'是不推荐使用的参数.请'包装'函数以提供参数.help("wrap",package ="GGally")
我通过看ggpairs()和wrap()帮助文件,并尝试很多的排列wrap()和wrap_fn_with_param_arg()功能.
我可以按预期工作:
ggpairs(swiss, lower = list(continuous = wrap("smooth")))
Run Code Online (Sandbox Code Playgroud)
但是一旦我添加了黄土部分,它就不会:
ggpairs(swiss, lower = list(continuous = wrap("smooth"), method = wrap("loess")))
Run Code Online (Sandbox Code Playgroud)
当我尝试上面这一行时,我收到此错误.
值[3L]出错:以下ggpair绘图函数随时可用:连续:c('points','smooth','density','cor','blank')组合:c('box','dot ','facethist','facetdensity','denstrip','blank')离散:c('ratio','facetbar','blank')na:c('na','blank')
diag continuous:c('densityDiag','barDiag','blankDiag')diag离散:c('barDiag','blankDiag')diag na:c('naDiag','blankDiag')
您还可以提供您自己的函数,该函数遵循函数的api(数据,映射,...){...并返回一个ggplot2绘图对象Ex:my_fn < - function(data,mapping,...){p < - ggplot(data = data,mapping = mapping)+ geom_point(...)p} ggpairs(data,lower = list(continuous = my_fn))
提供的功能:黄土
显然我在错误的地方进入黄土.任何人都可以帮我理解如何添加黄土部分?
请注意,我的问题与此问题不同,因为我问如何在ggpairs中实现黄土,因为params参数已被弃用.
非常感谢.
我试图获得类似smoothScatter函数的功能,仅在ggplot中.除了绘制N个最稀疏的点之外,我已经找到了所有的东西.谁能帮我这个?
library(grDevices)
library(ggplot2)
# Make two new devices
dev.new()
dev1 <- dev.cur()
dev.new()
dev2 <- dev.cur()
# Make some data that needs to be plotted on log scales
mydata <- data.frame(x=exp(rnorm(10000)), y=exp(rnorm(10000)))
# Plot the smoothScatter version
dev.set(dev1)
with(mydata, smoothScatter(log10(y)~log10(x)))
# Plot the ggplot version
dev.set(dev2)
ggplot(mydata) + aes(x=x, y=y) + scale_x_log10() + scale_y_log10() +
stat_density2d(geom="tile", aes(fill=..density..^0.25), contour=FALSE) +
scale_fill_gradientn(colours = colorRampPalette(c("white", blues9))(256))
Run Code Online (Sandbox Code Playgroud)
请注意,在基本图形版本中,如何在平滑密度图上绘制100个最"稀疏"的点.稀疏度由点坐标处的核密度估计值定义,重要的是,核对密度估计值是在对数变换(或任何其他坐标变换)之后计算的.我可以通过添加来绘制所有点+ geom_point(size=0.5),但我只想要稀疏点.
有没有办法用ggplot来实现这个目标?这有两个部分.第一个是找出坐标变换后的异常值,第二个是仅绘制那些点.
我看到这些帖子 GGally :: ggpairs绘图没有网格线时绘制相关系数 使用ggpairs来创建这个图
阅读后,我能够实现这个黑客https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r,我的情节看起来像这样
我认为这是一个很好的结果,但我无法改变颜色.
MWE就是这个
library(ggally)
# load the hack
source("ggally_mod.R")
# I saved https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r as "ggally_mod.R"
assignInNamespace("ggally_cor", ggally_cor, "GGally")
ggpairs(swiss)
Run Code Online (Sandbox Code Playgroud)
现在我想跑
ggpairs(swiss,
lower=list(continuous="smooth", wrap=c(colour="blue")),
diag=list(continuous="bar", wrap=c(colour="blue")))
Run Code Online (Sandbox Code Playgroud)
但颜色保持不变.有没有办法改变颜色,因为params不再工作了?
使用以下代码:
library(GGally)
library(tidyverse)
library(viridis)
dat <- iris %>% select(-Species)
my_fn <- function(data, mapping, ...){
# Using default ggplot density function
p <- ggplot(data = data, mapping = mapping) +
stat_density2d(aes(fill=..density..), geom="tile", contour = FALSE) +
scale_fill_gradientn(colours=viridis::viridis(100, option="viridis"))
p
}
ggpairs(dat, lower=list(continuous=my_fn)) +
theme_void()
Run Code Online (Sandbox Code Playgroud)
我可以创建此图:
我的问题是如何使用以下方案更改GGally低密度图:
library(MASS)
# Get density of points in 2 dimensions.
# @param x A numeric vector.
# @param y A numeric vector.
# @param n Create a square n by n grid to compute density.
# …Run Code Online (Sandbox Code Playgroud) 我在R中有一个散点图.每个(x,y)点都根据其z值着色.所以,你可以把每个点为(x,y,z),在(x,y)确定其位置,并z确定其沿彩色渐变色.我想补充两件事
z值对应于什么颜色这是我目前的代码,以及它制作的图像.
x <- seq(1,150)
y <- runif(150)
z <- c(rnorm(mean=1,100),rnorm(mean=20,50))
colorFunction <- colorRamp(rainbow(100))
zScaled <- (z - min(z)) / (max(z) - min(z))
zMatrix <- colorFunction(zScaled)
zColors <- rgb(zMatrix[,1], zMatrix[,2], zMatrix[,3], maxColorValue=255)
df <- data.frame(x,y)
x <- densCols(x,y, colramp=colorRampPalette(c("black", "white")))
df$dens <- col2rgb(x)[1,] + 1L
plot(y~x, data=df[order(df$dens),],pch=20, col=zColors, cex=1)
Run Code Online (Sandbox Code Playgroud)
