【问题标题】:How to assign picture to stacked bar plot如何将图片分配给堆积条形图
【发布时间】:2012-07-11 04:16:13
【问题描述】:

我正在处理堆积条形图,但我需要将图像分配到特定堆栈上。

我如何在 R 中做到这一点。

DF = data.frame(names = c("tomato", "potato", "cabbage", 
                          "sukuma-wiki", "terere"),
                freq=c(7,4,5,8,20))
barplot(as.matrix(DF[,2]), col=heat.colors(length(DF[,2])), 
        legend=DF[,1], xlim=c(0,9), width=2)

【问题讨论】:

  • 我会用 ggplot2 来解决这个问题,尽管 base 也可能是可行的。这是更新手册:(LINK)。见第 22-23 页
  • 但是这里需要手动设置图片的位置。我需要在每个绘图的输入文件中动态生成 100,000 个具有不同手部位置的绘图。我该怎么做?

标签: image r import stacked


【解决方案1】:

这里有一个方法,你可以用grid 做到这一点。

# libraries
library(jpeg)
library(grid)

# a is your image
a <- readJPG("foo.jpg")

# ypos.img is at which height of the barchart you want to place the image
ypos.img <- 10

# Create a new polot
grid.newpage()
pushViewport(viewport(width=0.9, height=0.9))

# add image
pushViewport(viewport(yscale=c(0,sum(DF[,2])), xscale=c(0,1), x=0, y=0, width=0.4, height=1, just=c("left", "bottom")))
grid.raster(a, y=unit(ypos.img, "native"))

# add barplot
popViewport()
pushViewport(viewport(x=0.4, y=0, width=0.6, height=1, just=c("left", "bottom")))
pushViewport(dataViewport(xscale=c(0,2), yscale=c(0, sum(DF[,2]))))
cols <- heat.colors(length(DF[,2]))

for (i in 1:nrow(DF)) {
 start <- 0 
 if (i > 1) start <- sum(DF[1:(i-1), 2])
 grid.rect(x=0, y=start, width=1, height=DF[i, 2], default.units="native", just=c("left", "bottom"), gp=gpar(fill=cols[i]))
}

popViewport(2)

# Legend
pushViewport(viewport(x=0.75, y=0, width=0.25, height=1, just=c("left", "bottom")))
ypos <- 0.8
for (i in 1:nrow(DF)) {
 grid.rect(x=0.05, y=ypos, width=0.1, height=0.05, just=c("left", "bottom"), gp=gpar(fill=cols[i]))
 grid.text(DF[i,1], x=0.2, y=ypos, just=c("left", "bottom"))
 ypos <- ypos - 0.05
}

popViewport()

【讨论】:

  • 谢谢它对我来说很好用。有没有办法根据它们的值来表示颜色的强度。我的意思是热色强度应该根据(亮或暗)数值。
  • 看看?gpar,然后你可以调整alpha的值。如果它对您有用,也请考虑将问题标记为已回答。
猜你喜欢
  • 2020-11-10
  • 1970-01-01
  • 2012-11-09
  • 2017-05-27
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多