Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建R/闪亮的多层象形图_R_Dataframe_Plot_Graph_Shiny - Fatal编程技术网

创建R/闪亮的多层象形图

创建R/闪亮的多层象形图,r,dataframe,plot,graph,shiny,R,Dataframe,Plot,Graph,Shiny,我正在制作一个人风险的象形图。我试图以图形方式显示它,以便清楚地显示不同因素的附加风险 这就是我的图表当前的样子: 我希望能够用红心填写某个因素的风险,并用绿心填写这一行的其余部分。例如,HxCHF要么从0填充到~14.1,然后从14.1填充到18.5,然后用绿色填充(理想情况下,它会一直缩放到100,但我发现图形缩放不到~20) 我想问题是因为我把最后一颗红色的心剪成一排,然后让它的其余部分透明,我得到了这些空隙。是否有必要创建一个虚拟的绿色红心数据框,运行到最大风险,然后在顶部覆盖红色风险

我正在制作一个人风险的象形图。我试图以图形方式显示它,以便清楚地显示不同因素的附加风险

这就是我的图表当前的样子:

我希望能够用红心填写某个因素的风险,并用绿心填写这一行的其余部分。例如,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
库(png)
图书馆(GG2)
图书馆(网格)

在一旁填充图像,使用
重新排序
而不是
排列
,因为重要的是因子级别的顺序,而不是数据帧的顺序。您可以提供一个示例。我正在尝试这样的事情,但却出现了奇怪的错误
newDF
reorder(newDF$units,X=newDF$units,FUN=length)
不确定
newDF
看起来是什么样子,但我认为上面是关于正确的这就是DF看起来的样子:
units what 28.34507 Current Risk 21.00918 HxCHF…
但是当我运行时,我会得到错误和奇怪的控制台打印输出