You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I often create a heatmap that is too long to display on one chart. I have to scratch my head each time to figure out how to break it into columns. I eventually end up with some integer division solution x %/% y like here:
Code
library(tidyverse)
library(scales)
df<-USJudgeRatings|>
as_tibble(rownames="y") |>
gather(x, fill, -y) |>
mutate(
x= fct_reorder(x, fill, mean),
y= fct_reorder(y, fill, sum, .desc=FALSE)
) |>
print()
# number of columns for plotn_col<-2# separate into columns and keep factor orderplot_prep<-df|>
mutate(
y_order= as.integer(y),
max_rows= ceiling(n_distinct(y) /n_col),
facets= (-y_order%/%max_rows) # needs something to facet on, need '-' to keep highest values on left
) |>
print()
# plotp<-plot_prep|>
ggplot(aes(x, y, fill=fill)) +
facet_wrap(~facets, ncol=n_col, scales="free_y") +
geom_tile(color="white", size=0.5) +
scale_fill_stepsn(breaks= breaks_pretty(6), colours= viridis_pal()(5)) +
theme(
strip.background.y= element_blank(),
strip.text= element_blank(),
axis.text= element_text(size=7)
)
p+ theme(aspect.ratio=1)
# identify aspect ratioaspect<-plot_prep|>
select(x, y) |>
summarise_all(n_distinct) |>
mutate(ratio=y/x/n_col) |>
print()
p+ theme(aspect.ratio=aspect$ratio) # <------ fixed 1:1 size
Could a solution be implemented like one of these?
facet_wrap(facets = ~., ncol = 2) -- currently just keeps chart as-is (no facets)
a helper function facet_wrap(facets = split_facet(ncol = 2))
a new function facet_split(ncol = 2)
Additionally, related to #4584, I often struggle to get the ratios correct. coord_fixed() throws an error and aspect.ratio affects each panel rather than "unit of y per unit of x".
I included code ☝️ to show how I do it: [# unique y] / [# unique x] / [# of cols]
The text was updated successfully, but these errors were encountered:
This would be a nice feature, but since it could be implemented in a separate package, I think it should be. (That makes much easier to evolve rapidly because it's not strongly connected to the very slow ggplot2 development process). You might consider shopping this idea around the authors of the various ggplot2 extension packages.
Uh oh!
There was an error while loading. Please reload this page.
I often create a heatmap that is too long to display on one chart. I have to scratch my head each time to figure out how to break it into columns. I eventually end up with some integer division solution
x %/% y
like here:Code
Could a solution be implemented like one of these?
facet_wrap(facets = ~., ncol = 2)
-- currently just keeps chart as-is (no facets)facet_wrap(facets = split_facet(ncol = 2))
facet_split(ncol = 2)
Additionally, related to #4584, I often struggle to get the ratios correct.
coord_fixed()
throws an error andaspect.ratio
affects each panel rather than "unit of y per unit of x".I included code ☝️ to show how I do it:
[# unique y] / [# unique x] / [# of cols]
The text was updated successfully, but these errors were encountered: