#r #ggplot2
#r #ggplot2
Вопрос:
Мои данные выглядят следующим образом
df<- structure(list(Data = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
9L, 10L, 11L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L,
23L, 8L, 12L), .Label = c("A", "B", "C", "D", "E", "F", "G",
"GH", "H", "I", "J", "JJ", "K", "L", "M", "N", "O", "P", "Q",
"S", "T", "U", "V"), class = "factor"), Case1 = c(0.775230796,
0.752114939, 0.738305175, 0.579739531, 0.573781392, 0.572924713,
0.563521221, 0.558172423, 0.557918102, 0.552505171, 0.551921725,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA), Case2 = c(NA,
NA, 0.729029032, NA, NA, NA, NA, NA, 0.736282677, 0.702296369,
NA, 0.736060259, 0.735161607, 0.735100052, 0.734870114, 0.732743364,
0.703591649, NA, NA, NA, NA, NA, NA), Case3 = c(NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.735568109,
NA, NA, NA, NA, NA), Case4 = c(0.713963088, NA, NA, NA, NA, NA,
NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.781378904,
0.769328289, NA, NA, NA), Case5 = c(NA, NA, NA, NA, 0.693759347,
NA, NA, NA, NA, NA, NA, NA, NA, NA, 0.688396329, NA, NA, NA,
NA, NA, 0.6781535, NA, NA), Case6 = c(0.795781477, 0.793446723,
0.814514206, NA, 0.773564937, NA, NA, 0.783075476, NA, NA, NA,
0.742827684, 0.796443568, NA, 0.75610514, 0.751162004, NA, NA,
NA, NA, NA, 0.738104459, NA), Case7 = c(0.732114731, 0.720226731,
0.782045984, NA, 0.717304483, NA, NA, 0.674992626, NA, NA, NA,
NA, 0.71098987, NA, 0.676952218, NA, NA, NA, NA, NA, NA, NA,
0.676754903)), class = "data.frame", row.names = c(NA, -23L))
Я пытаюсь удалить строки, которые имеют только 1 значение или полностью NA
итак, чтобы удалить те, у которых есть полный NA, я могу сделать следующее
mydf<- df[!(rowSums(is.na(df))),]
Я могу построить его следующим образом
library(reshape)
library(ggplot2)
mm <- melt(df, id='Data')
ggplot(data = mm, aes(x = Data, y = value, fill = variable))
geom_bar(stat = 'identity', position = 'dodge')
Проблема в том, что это столбчатый график, я хочу иметь точечный график, например, для A, в одной строке друг над другом и показывает метку случая 1, случая 2, случая 3,….
что-то вроде этого
по оси y «Данные», по оси x «значения» и метки в виде «переменных» с разным цветом и размером
Комментарии:
1.
mydf<- df[!(rowSums(is.na(df))),]
выполнение этого приведет к удалению всех строк…
Ответ №1:
library(tidyverse)
df %>%
gather(variable, value, -Data) %>%
mutate(value = round(value*100)/100) %>% # Aligns bins to 0.1
ggplot(aes(x = value, fill = variable))
geom_dotplot(stackgroups = T)
Пожалуйста, обратите внимание, что точечный график по своей сути округляет данные в ячейки (в противном случае не будет стекирования, если значения не совпадают точно). С небольшой корректировкой вы можете заставить ggplot самостоятельно выбирать биннинг (я думаю, что по умолчанию ячейки отражают 1/30 диапазона данных). Если вы хотите контролировать размер ячеек, используйте binwidth
.
Я включаю binpositions = "all"
здесь, чтобы убедиться, что обращения помещены в те же ячейки, что и другие обращения, в противном случае они будут использовать свои собственные ячейки, которые не соответствуют ячейкам других обращений, и они не будут складываться.
df %>%
gather(variable, value, -Data) %>%
ggplot(aes(x = value, fill = variable))
geom_dotplot(stackgroups = T, binpositions = "all")
Комментарии:
1. Я не хочу добавлять или округлять значения. если они отображаются только с маленькими точками, соответствующими их значениям, уже нормально, ось Y не отображает данные!
2. Точечный график обычно (исключительно по моему опыту) используется для привязанных данных. Вы хотите создать точечный график? Вы, конечно, можете использовать точные значения для оси x, но если все они являются различными значениями, как вы хотите, чтобы они «складывались»?
3. Пожалуйста, уточните свой вопрос, поскольку, похоже, запрашивается точечный график (который представляет собой форму гистограммы с использованием бинированных данных), но также кажется, что вы не хотите бинирования.