我正在尝试用ggplot2做一个情节,但我正在努力使用geom tile.当我第一次使用这个geom时,我仔细查看了Hadley的文档,但我仍然无法得到我想要的东西.我想调整瓷砖宽度和瓷砖高度.我找到了如何在文档中调整拼贴宽度,但我正在努力攀登高度.以下一个情节为出发点:
test <- data.frame(
x = rep(c(1,3,6),2),
y = rep(c(1,3), each = 3),
w = rep(c(.5,2,1), 2),
z = sample(rep(LETTERS[1:6])))
ggplot(test, aes(x=x, y=y, fill = z)) + geom_tile(aes(width = w))
Run Code Online (Sandbox Code Playgroud)

我现在也想调整瓷砖的高度.第一个'列'中的底部图块(在x = 1处)从0到1运行,第一列中的顶部图块从1到4运行.在第二列中我想让底部图块运行从0到3,顶部瓷砖从3到4.对于最后一列,我希望底部从0到1.5,顶部从1.5到4.我尝试了很多东西,例如:
test2 <- data.frame(
x = rep(c(1,3,6),2),
y = c(0, 0, 0, 1, 3, 1.5),
w = rep(c(.5,2,1), 2),
z = sample(rep(LETTERS[1:6])),
h = c(1, 3, 1.5, 3, 1, 2.5))
ggplot(test2, aes(x=x, y=y, fill = z)) + geom_tile(aes(width = w, heigth = h))
Run Code Online (Sandbox Code Playgroud)
但没有一个产生我正在寻找的情节.
任何帮助将不胜感激.提前致谢!
geom_tile取审美height=h并生成ymin和ymax从-h/2 to h/2.这就是为什么你没有得到你想要的情节.虽然我完全支持@Didzis的解决方案,因为它非常简单并完成工作,但我将使用geom_tile两个原因来展示解决方案.这很有趣,总是很高兴知道:).
目标是y根据高度 "生成"您的位置,以便绘图符合您的预期.采用test2data.frame,
require(plyr)
# calculate y coordinate accounting for shift in y due to h
test2 <- ddply(test2, .(x), transform, y2 = c(0, head(h,-1)) + h/2)
p <- ggplot(test2, aes(x=x, y=y2, fill = z)) +
geom_tile(aes(width = w, height=h))
p
Run Code Online (Sandbox Code Playgroud)

现在,你看到高度整齐地生成(ymin和ymax)
ggplot_build(p)$data
# fill x y PANEL group xmin xmax ymin ymax
# 1 #00BFC4 1 0.50 1 4 0.75 1.25 0.0 1.0
# 2 #619CFF 1 2.50 1 5 0.75 1.25 1.0 4.0
# 3 #00BA38 3 1.50 1 3 2.00 4.00 0.0 3.0
# 4 #F8766D 3 3.50 1 1 2.00 4.00 3.0 4.0
# 5 #B79F00 6 0.75 1 2 5.50 6.50 0.0 1.5
# 6 #F564E3 6 2.75 1 6 5.50 6.50 1.5 4.0
Run Code Online (Sandbox Code Playgroud)
而不是geom_tile()使用geom_bar()与stat="identity"和使用h的y价值.您可以设置width=也为geom_bar()你只能得到可以忽略警告.
ggplot(test2,aes(x,h,fill=z))+geom_bar(stat="identity",aes(width=w))
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
7463 次 |
| 最近记录: |