创建R/闪亮的多层象形图
我正在制作一个人风险的象形图。我试图以图形方式显示它,以便清楚地显示不同因素的附加风险 这就是我的图表当前的样子: 我希望能够用红心填写某个因素的风险,并用绿心填写这一行的其余部分。例如,HxCHF要么从0填充到~14.1,然后从14.1填充到18.5,然后用绿色填充(理想情况下,它会一直缩放到100,但我发现图形缩放不到~20) 我想问题是因为我把最后一颗红色的心剪成一排,然后让它的其余部分透明,我得到了这些空隙。是否有必要创建一个虚拟的绿色红心数据框,运行到最大风险,然后在顶部覆盖红色风险红心?或者甚至只是用红心填充部分图形,例如从14-16填充红心,然后用绿色填充0-14和16-18 我正在使用以下方法构建图表:创建R/闪亮的多层象形图,r,dataframe,plot,graph,shiny,R,Dataframe,Plot,Graph,Shiny,我正在制作一个人风险的象形图。我试图以图形方式显示它,以便清楚地显示不同因素的附加风险 这就是我的图表当前的样子: 我希望能够用红心填写某个因素的风险,并用绿心填写这一行的其余部分。例如,HxCHF要么从0填充到~14.1,然后从14.1填充到18.5,然后用绿色填充(理想情况下,它会一直缩放到100,但我发现图形缩放不到~20) 我想问题是因为我把最后一颗红色的心剪成一排,然后让它的其余部分透明,我得到了这些空隙。是否有必要创建一个虚拟的绿色红心数据框,运行到最大风险,然后在顶部覆盖红色风险
library(png)
library(ggplot2)
library(grid)
fill_images <- function() {
l <- list()
for (i in 1:nrow(newDF))
{
for (j in 1:dfMaster[1,'MajorComplications']) #From another DF with the max risk overall
{
if(j <= ceiling(newDF$units[i]))
img <- readPNG("www/Heart_symbol_c00.png")
else
img <- readPNG("www/green-heart-md.png")
g <- rasterGrob(img, interpolate=TRUE)
l <- c(l, annotation_custom(g, xmin = i-1/2, xmax = i+1/2, ymin = j-1, ymax = j))
}
}
})
l
}
clip_images <- function(restore_grid = TRUE) {
l <- list()
for (i in 1:nrow(newDF)) {
l <- c(l, geom_rect(xmin = i-1/2,
xmax = i+1/2,
ymin = newDF$units[i],
ymax = ceiling(newDF$units[i]),
colour = "white",
fill = "white"))
if (restore_grid && ceiling(newDF$units[i]) %in% major_grid)
l <- c(l, geom_segment(x = i-1,
xend = i+1,
y = ceiling(newDF$units[i]),
yend = ceiling(newDF$units[i]),
colour = grid_col,
size = grid_size))
}
l
}
grid_col <- "grey50"
grid_size <- 0.6
major_grid <- 0:10 * 2
p <- ggplot(newDF, aes(what, units)) +
fill_images() +
clip_images() +
geom_bar(fill=NA, colour="transparent", size=1.2, alpha=0.5, stat="identity") +
coord_flip() +
scale_y_continuous(breaks=seq(0, 20, 2)) +
scale_x_discrete() +
theme_bw() +
theme(axis.title.x = element_blank(), axis.title.y = element_blank(),
panel.grid.major.x = element_line(colour = grid_col, size = grid_size),
panel.grid.major.y = element_line(colour = NA))
p
库(png)
图书馆(GG2)
图书馆(网格)
在一旁填充图像,使用重新排序
而不是排列
,因为重要的是因子级别的顺序,而不是数据帧的顺序。您可以提供一个示例。我正在尝试这样的事情,但却出现了奇怪的错误newDFreorder(newDF$units,X=newDF$units,FUN=length)
不确定newDF
看起来是什么样子,但我认为上面是关于正确的这就是DF看起来的样子:units what 28.34507 Current Risk 21.00918 HxCHF…
但是当我运行时,我会得到错误和奇怪的控制台打印输出