我正致力于创建一个人的风险象形图。我试图以图形方式显示它,以便清楚地显示不同因素的额外风险。
这是我目前的图表:
我希望能够用红心填充某个因素的风险,并用绿色的心填充其余部分。因此,例如HxCHF将从0填充到~14.1然后从14.1填充到18.5将填充绿色(理想情况下它将一直缩放到100但是我发现图形不能很好地缩放过去~20)。
我认为这个问题是因为我把最后的红心连续夹在一起,让那颗心的其余部分变得透明,我得到了这些空白。无论如何都要创建一个绿色心脏的虚拟数据框架,以达到最大风险,然后将红色风险心叠加在顶部?或者甚至只用红心填充图表的一部分,例如14-16用红心,然后是0-14和16-18用绿色,例如?
我使用这些方法构建图表:
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
作为一个较小的旁白问题,当我重新排序dataFrame以将当前风险置于顶部并按降序风险顺序通过:newDF < arrange(newDF,units)
对其进行排序时,行标签不会重新排序。知道为什么会这样吗?
提前谢谢!