Есть ли функция, позволяющая присваивать значениям цифры c символам? - PullRequest
0 голосов
/ 16 апреля 2020

Итак, проблема в следующем: у меня есть набор данных, который содержит

  1. Condition факторную переменную с (для этого примера) 3 уровнями, которые должны быть нанесены на ось Y,
  2. Факторная переменная Group с тремя уровнями, которые должны быть нанесены на x, и
  3. Значение для каждой группы в каждом условии (пример данных ниже).

Три уровня на оси x указывают условия, и я хотел бы отображать наблюдения на каждом уровне по y в формате сюжета для скрипки. Мне известно о том, что мне нужно число c на оси Y для ggplot, чтобы построить эти данные, но я не могу найти решение, чтобы решить эту проблему с указанием значений c (которые будут меняться от эксперимента к эксперименту) для значения у в каждом условии х. Мой прогресс (после получения предыдущей помощи здесь) заключается в правильном форматировании данных во фрейм данных и их преобразовании в длинный формат для ggplot.

Пример данных ниже:

Condition  Observation  Value

1-----------------A-----------11

1-----------------B-----------7

1-----------------C-----------2

2-----------------A-----------21

2-----------------B-----------2

2-----------------C-----------5

3-----------------A-----------16

3-----------------B-----------45

3-----------------C-----------34

РЕДАКТИРОВАТЬ:

> SampleA <- c(3,7,9)
> SampleB <- c(15,23,33)
> SampleC <- c(21,19,12)
> Observations <- c("Observation 1", "Observation 2", "Observation 3")
> df0 <- data.frame(Observations = as.factor(Observations), SampleA, SampleB, SampleC)
>library(ggplot2)
>df0 <- reshape2::melt((df0, id.vars = "Observations"))

1 Ответ

1 голос
/ 16 апреля 2020

Я бы предложил что-то вроде этого:

library(dplyr)
df0 = df0 %>%
  group_by(Observations) %>%
  mutate(norm_value = value / sum(value))

ggplot(df0, aes(x = Observations, y = variable, fill = norm_value)) + 
  geom_tile() +
  geom_label(aes(label = scales::percent(norm_value)), fill = "gray80") +
  guides(fill = F) +
  coord_equal() +
  labs(x = "", y = "") +
  theme_minimal()

enter image description here

Если у вас много данных, я бы удалил отдельные метки и полагаться на цветовую шкалу, но с этими несколькими точками прямые метки кажутся ясными.

...