как вручную добавить значения в гистограмму ggplot

avatar
giegie
1 июля 2021 в 19:55
78
1
0

Я хотел бы вручную добавить значения в гистограмму, код которой вы можете увидеть ниже.

например. Для банана

Stress = 10
Normal = 80
Nitrogen = 10

library(ggplot2)
library(viridis)
library(hrbrthemes)

# create a dataset
specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)
value <- abs(rnorm(12 , 0 , 15))
data <- data.frame(specie,condition,value)

# Small multiple
ggplot(data, aes(fill=condition, y=value, x=specie)) + 
    geom_bar(position="stack", stat="identity") +
    scale_fill_viridis(discrete = T) +
    ggtitle("Studying 4 species..") +
    theme_ipsum() +
    xlab("")

Источник
MrFlick
1 июля 2021 в 20:01
0

Что ты имеешь в виду? Где/как вы хотите вручную добавить значения на этот график?

Peter
1 июля 2021 в 20:05
0

Пожалуйста, укажите пакеты, которые вы используете

giegie
1 июля 2021 в 20:08
0

Я добавил пакеты. По оси Y я хотел бы иметь шкалу в%.

giegie
1 июля 2021 в 20:09
0

Для банана. Стресс и азот должны быть только 10%, тогда как нормальный должен быть 80%.

Ответы (1)

avatar
Peter
1 июля 2021 в 22:43
0

Это поможет?

viridis не совместим с моей версией R, поэтому я не совсем уверен, как это будет выглядеть. Я закомментировал соответствующие строки кода, чтобы пример можно было воспроизвести.

Применяется set.seed() к данным, чтобы сделать их воспроизводимыми.

Параметр

geom_col() требует меньше ввода, чем geom_bar()

geom_text() для автоматической маркировки значений; Неясно, означает ли ссылка в вопросе об этикетках бананов этикетки только для бананов или для всех видов. Показали, как применить фильтр, чтобы применить метки только к бананам, просто удалите фильтр, если вам нужны метки для всех видов. Если вам действительно нужны метки вручную, создание вспомогательного фрейма данных — один из способов.

Не совсем понятно, что вы имеете в виду, когда хотите масштабировать в %: отредактировали заголовок оси, чтобы включить единицу измерения в %. И изменена ось Y с scale_y_continuous(), хотя заметили, что hrbrthemes::scale_x_percent() существует, поэтому вы можете изучить, как использовать эту функцию. Выбирайте...

library(ggplot2)
#library(viridis)
library(hrbrthemes)
library(dplyr)

ggplot(data, aes(x = specie, y = value, fill = condition)) + 
  geom_col() +
  geom_text(data = filter(data, specie == "banana"),
            aes(x = specie,
                y = value,
                label = paste(round(value, 0), "%")),
            position = "stack")+
  # scale_fill_viridis(discrete = T) +
  scale_y_continuous(labels = scales::percent_format(scale = 1))+
  theme_ipsum() +
  labs(x = NULL,
       y = "Value [%]",
       title = "Studying 4 species..")

Создано 02 июля 2021 г. в пакете reprex (v2.0.0)

данные

set.seed(123)
specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)
value <- abs(rnorm(12 , 0 , 15))
data <- data.frame(specie,condition,value)