R:用轴缩放几何点(ggplot2)

R:用轴缩放几何点(ggplot2),r,plot,ggplot2,R,Plot,Ggplot2,我已经编写了以下代码来在一组可重新缩放的轴上绘制我的x-y数据,pointSize中包含的值是我想要在每个绘制坐标处正确缩放的点的垂直/水平直径。我怎样才能让它工作呢?现在我只是用geom_point(aes(size))中默认使用的任何缩放来绘制点,而点不随轴缩放。使用坐标_笛卡尔重新缩放轴后,我希望绘制的点相对于轴相应地增加/减少 例如,如果点大小为5,则表示我希望点的水平和垂直直径相对于轴为5,而不考虑指定的XY缩放 编辑:pointSize中的min应该是min=0,而不是min=-10

我已经编写了以下代码来在一组可重新缩放的轴上绘制我的x-y数据,pointSize中包含的值是我想要在每个绘制坐标处正确缩放的点的垂直/水平直径。我怎样才能让它工作呢?现在我只是用geom_point(aes(size))中默认使用的任何缩放来绘制点,而点不随轴缩放。使用坐标_笛卡尔重新缩放轴后,我希望绘制的点相对于轴相应地增加/减少

例如,如果点大小为5,则表示我希望点的水平和垂直直径相对于轴为5,而不考虑指定的XY缩放

编辑:pointSize中的min应该是min=0,而不是min=-10

最小可复制代码:

# Sample size & x-y axes plot boundaries
sampleSize <- 100

# Set scale factor of x-y axes
xyScaling <- 1

# Set to false once sampled to rescale axis with same distributions
resample <- TRUE

if (resample == TRUE){
  xSample <- replicate(sampleSize, runif(1, min = -sampleSize/2, max = sampleSize/2))

  ySample <- replicate(sampleSize, runif(1, min = -sampleSize/2, max = sampleSize/2))

  pointSize <- replicate(sampleSize, runif(1, min = 0, max = 10))
}

sampleDataFrame <- data.frame(xSample, ySample, pointSize)
samplePlot <- ggplot(sampleDataFrame, aes(xSample, ySample))
samplePlot +
geom_point(data = sampleDataFrame, aes(size = sampleDataFrame$pointSize[])) + 
coord_cartesian(xlim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2))),
                ylim = c((xyScaling*(-sampleSize/2)),(xyScaling*(sampleSize/2)))) +
xlab("x") +
ylab("y") +
scale_size_identity(guide=FALSE)
#样本大小和x-y轴绘图边界
抽样这个,但我认为它没有得到实施。一个问题是,在单位纵横比的笛卡尔坐标系的特殊情况下,圆只是圆。最简单的解决方法可能是创建一个带有xy位置的data.frame来描述圆(椭圆),并将其绘制为多边形

library(gridExtra)
library(ggplot2)

circle <- polygon_regular(50)

pointy_points <- function(x, y, size){
  do.call(rbind, mapply(function(x,y,size,id) 
    data.frame(x=size*circle[,1]+x, y=size*circle[,2]+y, id=id),
         x=x,y=y, size=size, id=seq_along(x), SIMPLIFY=FALSE))

}

test <- pointy_points(1:10, 1:10, size=seq(0.2, 1, length.out=10))

ggplot(test, aes(x,y,group=id, fill=id)) + geom_polygon()
库(gridExtra)
图书馆(GG2)

圆圈您可以尝试在最低级别编辑点,但这相当复杂

library(ggplot2); library(grid)
p <- qplot(1:10, 1:10, size=I(10))
g <- ggplotGrob(p)

points <- g$grobs[[4]][["children"]][[2]]
g$grobs[[4]][["children"]][[2]] <- 
  editGrob(points, size = convertUnit(points$size, unitTo = "npc"))

grid.newpage()
grid.draw(g)
库(ggplot2);图书馆(网格)

p使用a提供答案会更容易、更有趣。My bad,这是我第一次出现堆栈溢出,将尽快返回“最小可复制示例”。作为提示,如果您使用命令
set.seed(1000)
其中
1000
ofc可以是任何数字,将选择相同的随机数。这有点像
R
存储了一个“随机”数字列表,而
set.seed
函数告诉它在什么时候开始读取列表。尝试给函数
+scale\u size\u continuous(range=c(0,max))
一个播放。关于
max
点,您必须从几何角度对其进行调整,以匹配缩放,但这是一个参数,它实际上会按照您的预期增长和收缩点。另外,将
geom_点
调用更改为
+geom_点(aes(size=pointSize))
就足够了,而不是更改您所拥有的(因为您没有覆盖数据,并且美学上可以看到
sampleDataFrame
的列名),我尝试在geom_点之后添加scale_size_continuous,这样它就可以读取
geom_点(data=sampleDataFrame,aes(size=pointSize))+scale_size_continuous(range=c(0,30))+…
,并且我随意更改了max,但它似乎没有任何影响。感谢您的建议,我会摆弄它,让你知道它是否有效。太棒了,这让我实现了我所需要的,非常感谢!
library(ggplot2); library(grid)
p <- qplot(1:10, 1:10, size=I(10))
g <- ggplotGrob(p)

points <- g$grobs[[4]][["children"]][[2]]
g$grobs[[4]][["children"]][[2]] <- 
  editGrob(points, size = convertUnit(points$size, unitTo = "npc"))

grid.newpage()
grid.draw(g)