Цветовой код PMF с легендой в ggplot2 - PullRequest
0 голосов
/ 09 июля 2019

Моя цель - создать два перекрывающихся PMF биномиального распределения, используя ggplot2, с цветовой кодировкой в ​​соответствии с указанными цветами, с легендой внизу.

Пока что, я думаю, я настроилкадр данных справа.

successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep('  A  ',11),rep('  B  ',11))
df1 <- data.frame(cbind(successes,freq,class))

Однако это дает неверный результат.

library(ggplot2)
g <- ggplot(df1, aes(successes),y=freq)
g + geom_bar(aes(fill = class))

Мне кажется, что я следую примеру, но получаю совершенно другой результат.Это (почти) делает то, что я хочу: было бы точно, если бы он дал относительные частоты.

g <- ggplot(mpg, aes(class))
g + geom_bar(aes(fill = drv))

Пара вопросов:

1) Где я ошибаюсь в своем блокекод?

2) Есть ли лучший способ показать PMF на одном графике?Я не намерен использовать гистограмму или гистограмму.

3) Как я могу настроить это, чтобы дать мне возможность выбирать цвета?

4) Как заказатьзначения по оси х?Они не категории.Это числа от 0 до 10, и они имеют естественный порядок, который я хочу сохранить.

Спасибо!

ОБНОВЛЕНИЕ

Сработали следующие два блока.

successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep('  A  ',11),rep('  B  ',11))
df1 <- data.frame(successes,freq,class)
ggplot(df1, aes(successes ,y=freq, fill = class)) +
geom_bar(stat = "identity") +
scale_x_continuous(breaks = seq(0,10,1)) +
scale_fill_manual(values = c("blue", "green")) + theme_bw()

И

successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep('  A  ',11),rep('  B  ',11))
df1 <- data.frame(successes,freq,class)
ggplot(df1, aes(x=successes,y=freq),y=freq) + 
geom_col(aes(fill = class)) +
scale_x_continuous(breaks = seq(0,10,1)) +
scale_fill_manual(values = c("blue", "green")) + theme_bw()

Ответы [ 2 ]

1 голос
/ 09 июля 2019

Я думаю, что ваша проблема в том, что при создании df1

успехи и частота меняются на факторы, которые вы думаете?

successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep('  A  ',11),rep('  B  ',11))
df1 <- data.frame(successes = as.numeric(successes), freq = as.numeric(freq), class)

ggplot(df1, aes(x = successes, y = freq)) +
  geom_bar(stat = "identity", aes(fill = class))

Если нет, счастливответить на любые дополнительные вопросы!

1 голос
/ 09 июля 2019

Это то, что вы ищете?

library(ggplot2)
g <- ggplot(df1, aes(successes ,y=freq, fill = class))
g + geom_bar(stat = "identity") +
scale_fill_manual(values = c("blue", "green"))

Конечно, помните, что вы действительно изменили бы создание своего фрейма данных на:

successes <- c(seq(0,10,1),seq(0,10,1))
freq <- c(dbinom(seq(0,10,1),10,0.2),dbinom(seq(0,10,1),10,0.8))
class <- c(rep('  A  ',11),rep('  B  ',11))
df1 <- data.frame(successes,freq,class)

как предложено в комментариях.

...