如何为 geom_tile 中的每个变量添加单独的图例?
Posted
技术标签:
【中文标题】如何为 geom_tile 中的每个变量添加单独的图例?【英文标题】:How do I add a separate legend for each variable in geom_tile? 【发布时间】:2021-05-02 10:32:49 【问题描述】:我想为每个变量设置一个单独的比例尺。
我在整个水柱中进行了测量,其平均值已计算为 50 厘米的箱子。我想使用 geom_tile 来显示整个水柱中每个 bin 中每个变量的变化,因此该图在 x 轴上有变量(分类),在 y 轴上有深度,每个都有不同的色标表示值的变量。我可以使用
对一个变量执行此操作ggplot(data, aes(x=var, y=depth, fill=value, color=value)) +
geom_tile(size=0.6)+ theme_classic()+scale_y_continuous(limits = c(0,11), expand = c(0, 0))
但是,如果我将所有变量放在一个图上,则图例会缩放到所有值的最小值和最大值,因此 bin 之间的变化会丢失。
为了提供一个可重复的示例,我使用了 mtcars,并且我包含了 alpha =
,这当然没有多大帮助,因为每个变量的规模都非常不同
data("mtcars")
# STACKS DATA
library(reshape2)
dat2b <- melt(mtcars, id.vars=1:2)
dat2b
ggplot(dat2b) +
geom_tile(aes(x=variable , y=cyl, fill=variable, alpha = value))
哪个产生
有没有办法为绘图上的每个变量添加比例尺?
这个问题与其他问题类似(例如here 和here),但它们没有在x 轴上使用分类变量,所以我无法修改它们以生成所需的图。
这是我只使用四个变量的情节模型,除了我将使用theme(legend.position="bottom")
将所有图例水平放置在情节底部
【问题讨论】:
你有多少个变量?你是说显示、马力、德拉特、重量、qsec...等的比例尺 我有 8 个变量,是的,我想要一个比例尺来表示 disp、hp、drat 等。 【参考方案1】:希望这会有所帮助: 函数 myfun 最初由 Duck 在这里发布:R ggplot heatmap with multiple rows having separate legends on the same graph
library(purrr)
library(ggplot2)
library(patchwork)
data("mtcars")
# STACKS DATA
library(reshape2)
dat2b <- melt(mtcars, id.vars=1:2)
dat2b
#Split into list
List <- split(dat2b,dat2b$variable)
#Function for plots
myfun <- function(x)
G <- ggplot(x, aes(x=variable, y=cyl, fill = value)) +
geom_tile() +
theme(legend.direction = "vertical", legend.position="bottom")
return(G)
#Apply
List2 <- lapply(List,myfun)
#Plot
reduce(List2, `+`)+plot_annotation(title = 'My plot')
patchwork::wrap_plots(List2)
【讨论】:
太好了,谢谢!另外,谢谢你的链接,我很惊讶我错过了它。以上是关于如何为 geom_tile 中的每个变量添加单独的图例?的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Avalonia 中的每个平台/操作系统定义一组单独的样式?
如何为每个 QTableView 单元格支持两个单独的可双击值?