На самом деле это два вопроса в одном (не уверен, идет ли речь о правилах SO, но в любом случае).
Первый вопрос: как я могу заставить geom_text
вписаться в geom_bar
? (динамически в соответствии со значениями)
Оглядываясь, решения, которые я нашел, меняли размер метки. Это, безусловно, работает, но не для каждого случая. Вы можете изменить размер для конкретного графика, чтобы текст был помещен в панель, но при изменении данных вам может потребоваться вручную изменить размер текста снова. Моя реальная проблема заключается в том, что мне нужно создать один и тот же сюжет для постоянного изменения данных (ежедневно), поэтому я не могу вручную настроить размер для каждого сюжета.
Я попытался установить размер метки как функцию данных. Это работает, но не идеально, но работает во многих случаях.
Но вот еще одна проблема, даже когда ярлык вписывается в панель, изменение размера заговора все испортит. Взглянув в нее, я также нашел в ggplot documentation, что
метки имеют высоту и ширину, но они являются физическими единицами, а не данными единицы. Количество места, которое они занимают на этом участке, не является постоянным в Единицы данных: при изменении размера графика метки остаются одинаковыми, но размер осей изменяется.
Который берет меня на мой второй вопрос: возможно ли изменить это поведение по умолчанию и позволить/сделать этикетки изменяться с помощью графика?
И позвольте мне уточнить мой первый вопрос. Можно ли принудительно установить geom_text
в пределах geom_bar
, динамически определяя размер текста, используя умную связь между физическими единицами и единицами данных?
Итак, чтобы следовать хорошей практике, вот мой воспроизводимый пример:
set.seed(1234567)
data_gd <- data.frame(x = letters[1:5],
y = runif(5, 100, 99999))
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2))
Этот код создает этот график:
Если я просто изменяю размер сюжета, метки
Итак, это мой второй вопрос. Было бы неплохо, чтобы этикетки также изменялись и сохраняли пропорции по отношению к барам. Любые идеи, как это сделать или если это возможно вообще?
Хорошо, но, вернувшись к тому, как установить метки внутри столбцов, самым простым решением является установка размера меток.
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2), size = 3)
Опять же, это работает, как показано ниже, но оно не поддерживает и не поддерживает изменения в данных.
Например, тот же самый код для генерации графика с разными данными дает катастрофические результаты.
data_gd <- data.frame(x = letters[1:30],
y = runif(30, 100, 99999))
ggplot(data = data_gd,
mapping = aes(x = x, y = y, fill = x)) +
geom_bar(stat = "identity") +
geom_text(mapping = aes(label = y, y = y/2), size = 3)
И я могу продолжить примеры, установив размер меток как функцию количества категорий по оси х и т.д. Но вы понимаете, и, возможно, один из вас может предложить мне теги ggplot2
.