gpt4 book ai didi

r - 如何在 geom_tile 中设置单独的列宽(在 ggplot2 中)

转载 作者:行者123 更新时间:2023-12-05 05:46:51 26 4
gpt4 key购买 nike

我想知道是否有人可以帮我解决这个问题:我想将 ggplot2 geom_tile 热图中各个列的宽度设置为不同的值。

library(ggplot2)
library(data.table)

ggplot(data = melt(as.matrix(mtcars))) + geom_tile(aes(x=Var2, y=Var1,fill = value))

我希望第一列 (mpg) 的宽度为 5,第二列为 2,等等。

谢谢

最佳答案

geom_tile()有一个 width 参数,您可以使用它以编程方式设置宽度。但是您必须小心,因为如果您没有明确说明标签的放置位置,它们最终会出现在有趣的地方。因此我根据指定的宽度预先计算每个标签的位置。在这里,您还必须知道这些列的顺序,以便它们正确显示。

library(tidyverse)

# set widths of each column and calculate position for lables and boxes
widths <- tibble(param = fct_inorder(names(mtcars)),
width = c(5, 2, rep(1, 9)),
x_end = cumsum(width),
x_pos = x_end - width/2
)

# plot and specify precalculated labels
mtcars %>%
rownames_to_column("car") %>%
pivot_longer(-car, "param") %>%
left_join(., widths) %>%
ggplot(aes(x_pos, car, fill = value)) +
geom_tile(aes(width = width)) +
scale_x_continuous(breaks = widths$x_pos, labels = widths$param)
#> Joining, by = "param"

reprex package 创建于 2022-02-14 (v2.0.1)

关于r - 如何在 geom_tile 中设置单独的列宽(在 ggplot2 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71116216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com