繁体   English   中英

使用在整个图区域中随机生成的观测值创建可视化效果

[英]Creating a visualization with observations randomly generated over the entire area of a plot

简而言之,我正在寻求帮助来创建一个绘图,其中将绘图的特定区域指定给某个随机分配的观测值(该观测值具有由颜色指定的特定因子)。 我更喜欢ggplot2或d3。

我今天在讨论中,并试图证明一个观点,即使我们随机选择一个观察值,我们也可能会选择一个感兴趣的观察值。 换句话说,如果每个观察值都随机分配到飞镖的某个部分,而我又投掷了飞镖,那么我的飞镖很有可能会击中一个值得关注的观察值

现在,我现在正试图创建此飞镖。

我一直在搞弄ggplot2,我已经接近我想要但不完全是的可视化。

首先,我尝试使用geom_polar。 我为每次观察随机生成坐标

df$Coord1 <- sample(50, size = nrow(df), replace = TRUE)
df$Coord2 <- sample(50, size = nrow(df), replace = TRUE)

然后绘制它们的图但是,这里的问题是未占用绘制图的所有区域。 (还有一个问题,就是有些点实际上是重叠的……所以,如果有人也知道如何生成永远不会重叠的坐标,那将是很好的。)如果我要扔飞镖,我可能不会击中观察点。 这是我使用的代码:

dartboard <- ggplot(df, aes(Coord1, Coord2, fill = Classification)) +
geom_tile()+coord_polar()

尝试飞镖1

所以,然后我尝试了饼图。

pie <- ggplot(df, aes(x = factor(1), fill = factor(Classification))) +
geom_bar(width = 1) +  coord_polar()

尝试#2

这很好,因为它是一个完整的圆圈,但是当我希望它们随机散布在整个图上时,它将分类归为一组。

我还尝试复制此热图创建( http://www.r-bloggers.com/controlling-heatmap-colors-with-ggplot2/ ),但我还无法弄清楚如何使其与我的图正确匹配。数据。

简而言之,我正在寻求帮助来创建一个绘图,其中将绘图的特定区域指定给具有特定因素的特定观察值。

有任何想法吗?

更新1:

这段代码是我在概念上从视觉上寻找的(图表的所有部分都包含一个观察值:

df <- expand.grid(x = 1:20, y = 1:20)
samples <- c("one", "two", "three", "four", "five")
df$series <- samples[runif(n = nrow(df), min=1,max=length(samples))]
g <- ggplot(df, aes(fill=series, xmin = x, ymin = y, xmax = x+1, ymax = y+1))
g <- g + geom_rect()
g <- g + coord_polar(theta="y")
g <- g + theme(panel.grid=element_blank())
g <- g + theme(axis.text=element_blank())
g <- g + theme(axis.ticks=element_blank())
g

尝试1

但是现在我试图弄清楚如何将其应用于我自己的数据集,该数据集包含约1500个观测值。 该图片中的坐标与expand.grid一起使用,因此现在我想弄清楚如何为我自己的1500个观测值分配坐标。

更新2:

我在下面的代码中取得了相对的成功。

成功

random <- expand.grid(x = 1:40, y = 1:39)

random <- random %>%
  mutate(ID = 1,
         ID = cumsum(ID))

plot.data <- full_join(data, random, by = "ID")

samples <- c("UI", "IN", "OW", "BE" , "Five")
plot.data$Classification <- samples[runif(n = nrow(plot.data), min=1,max=length(samples))]
g <- ggplot(plot.data, aes(fill=Classification, xmin = x, ymin = y, xmax = x+1, ymax = y+1))
g <- g + geom_rect()
g <- g + coord_polar(theta="y")
g <- g + theme(panel.grid=element_blank())
g <- g + theme(axis.text=element_blank())
g <- g + theme(axis.ticks=element_blank())
g <- g + scale_fill_manual(values=c("dark green", "orange" , "yellow" , "red" , "green"))
g

我使用expand.grid函数将坐标分配给孩子。 一些观测结果被遗漏了,因为无法给它们提供坐标,但这没关系。

我现在唯一需要关注/抱怨的是,某些观测值比其他观测值大(因此更容易打中……),因此我可以检查该热图路线。 时间会证明一切。 到目前为止非常感谢您的帮助。

更新3:

另一个版本(可能是最终形式):

最终形式

这样,每个观察值的大小大致相同。

此热图版本的基础可以在以下位置找到: http : //www.r-bloggers.com/controlling-heatmap-colors-with-ggplot2/但是这是我自己的代码

ggplot(plot.data, aes(x = x, y = y, fill = factor(Classification))) +
  geom_tile(color = "black") +
  scale_fill_manual(values=c("dark green", "orange" , "yellow" , "red" , "green")) +
  theme(legend.position="none") +
  theme_change

这个怎么样?

df <- expand.grid(x = 1:20, y = 1:20)
samples <- c("one", "two", "three", "four", "five")
df$series <- samples[runif(n = nrow(df), min=1,max=length(samples))]
g <- ggplot(df, aes(fill=series, xmin = x, ymin = y, xmax = x+1, ymax = y+1))
g <- g + geom_rect()
g <- g + coord_polar(theta="y")
g <- g + theme(panel.grid=element_blank())
g <- g + theme(axis.text=element_blank())
g <- g + theme(axis.ticks=element_blank())
g

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM