Ответ 1
Как вы обнаружили, это нелегкое решение, но оно очень много. Поскольку такого рода вопросы задают так часто, я считаю полезным объяснить, почему это сложно, и предложить потенциальное решение.
Мой опыт заключается в том, что люди, приходящие на ggplot2 или решетку, принципиально неправильно понимают цель огранки (или решетки, в решетке). Эта особенность была разработана с учетом очень конкретной идеи: визуализация данных по нескольким группам, которые имеют общий масштаб. Это происходит от чего-то, называемого принципом малых кратных, поддерживаемых Туфтом и другими.
Размещение панелей рядом друг с другом с очень разными масштабами - это то, что специалисты по визуальному дизайну будут стараться избегать, потому что это может быть в лучшем случае ошибочным. (Я не ругаю вас здесь, просто объясняя обоснование...)
Но, разумеется, как только у вас появится этот отличный инструмент в открытом доступе, вы никогда не знаете, как люди его будут использовать. Таким образом, он растягивается: запросы возникают, чтобы позволить шкалам варьироваться по панели и устанавливать различные аспекты графика отдельно для каждой панели. И поэтому огранка в ggplot2 была значительно расширена за пределы ее первоначального намерения.
Одним из следствий этого является то, что некоторые вещи трудно реализовать просто из-за первоначального намерения проекта. Вероятно, это один из таких экземпляров.
Хорошо, достаточно объяснений. Здесь мое решение.
Хитрость здесь заключается в том, что вы не рисуете графики, которые имеют масштаб. Для меня это означает, что вы даже не должны думать об использовании огранки вообще. Вместо этого сделайте каждый график отдельно и расположите их вместе на одном графике:
library(gridExtra)
p1 <- ggplot(subset(melted.df,variable == 'dollars'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density() +
scale_x_log10(labels = dollar_format())
p2 <- ggplot(subset(melted.df,variable == 'counts'),
aes(x = value)) +
facet_wrap(~variable) +
geom_density()
grid.arrange(p1,p2)
Я только догадываюсь, что вам нужно использовать geom_*
, и я уверен, что это не то, что вы хотели бы построить, но, по крайней мере, это иллюстрирует принцип.