#r #ggplot2 #bar-chart
#r #ggplot2 #гистограмма
Вопрос:
Я хотел бы иметь диаграммы, в которых столбцы имеют одинаковую ширину на разных графиках, независимо от того, сколько столбцов показано. Я не хочу показывать графики на одной странице или упорядочивать их с помощью фасетов grid.arrange
или чего-то подобного, а просто иметь два графика с полосами одинаковой ширины.
Я мог бы сделать это, просто умножив ширину на количество полос на графике, деленное на количество полос на графике с наибольшим количеством полос (см. Пример). Но было бы более удобным и несколько более чистым кодом, если бы я мог сделать это без каких-либо вычислений перед вызовом ggplot.
Есть ли способ указать ширину полосы в единицах измерения, таких как линии, em, сантиметры?
Или я могу получить доступ к количеству уровней переменной, сопоставленной с x-эстетикой в вызове geom_col
? (Обратите внимание на переменную, сопоставленную с x-эстетическими изменениями между графиками)
Или есть другое простое решение?
ggplot(data.frame(x=factor(1:2), y=4:5), aes(x=x, y=y))
geom_col(width=0.7*2/3)
ggplot(data.frame(A=factor(1:3), y=3:5), aes(x=A, y=y))
geom_col(width=0.7*3/3)
Ответ №1:
AFAIK, вы не можете установить абсолютную ширину в geom_col()
/ geom_bar()
, поэтому вам придется либо предварительно рассчитать пропорции и соотношение сторон полос, либо использовать geom_segment()
, который принимает size
аргумент, который является абсолютным. Они не имеют внутренних параметров в виде прямоугольников и, однако, не принимают отдельные colour
fill
аргументы и.
library(ggplot2)
library(patchwork)
g1 <- ggplot(data.frame(x=factor(1:2), y=4:5), aes(x=x, y=y, xend = x, yend = 0))
geom_segment(size = 20)
g2 <- ggplot(data.frame(A=factor(1:3), y=3:5), aes(x=A, y=y, xend=A, yend = 0))
geom_segment(size = 20)
g1 g2
Комментарии:
1. Это должно сработать, большое спасибо. Если мне понадобится заливка и цвет, я все равно могу рассчитать размеры вручную и использовать
geom_rect