Подтвердить что ты не робот

Ggplot2: графики плотности Overlay R

Я хочу наложить несколько графиков плотности в R и знать, что есть несколько способов сделать это, но они не работают для меня по той или иной причине (библиотека "sm" не устанавливает, и я ' m noob достаточно, чтобы не понимать большую часть кода). Я также попробовал график и пар, но я бы хотел использовать qplot, так как он имеет больше параметров конфигурации.

У меня есть данные, сохраненные в этой форме

library(ggplot2)
x <- read.csv("clipboard", sep="\t", header=FALSE)
x
     V1     V2    V3
1    34     23    24
2    32     12    32

и я хотел бы создать 3 наложенных графика со значениями из V1, V2 и V3, используя или оттенки серого, чтобы заполнить или использовать точечные линии или что-то подобное легенде. Можете ли вы, ребята, помочь мне?

Спасибо!

4b9b3361

Ответ 1

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

Вот решение, я сгенерировал некоторые данные (3 нормальных распределения, центрированные вокруг разных точек). Я также сделал несколько гистограмм и ящиков, если вы этого хотите. Альфа-параметры контролируют степень прозрачности заливки, если вы используете цвет вместо заполнения, вы получаете только очертания

x <- data.frame(v1=rnorm(100),v2=rnorm(100,1,1),v3=rnorm(100,0,2))
library(ggplot2);library(reshape2)
data<- melt(x)
ggplot(data,aes(x=value, fill=variable)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=variable)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=variable, y=value, fill=variable)) + geom_boxplot()

enter image description here

Ответ 2

Для полноты картины самый простой способ наложения графиков на основе фактора:

ggplot(data, aes(x=value)) + geom_density(aes(group=factor))

Но, как упоминалось @user1617979, aes(color=factor) и aes(fill=factor), вероятно, более полезны на практике.three density plots overlaid by factor

Ответ 3

Некоторые люди спрашивают, можете ли вы сделать это, если дистрибутивы имеют разную длину. Ответ - да, просто используйте список вместо фрейма данных.

library(ggplot2)
library(reshape2)
x <- list(v1=rnorm(100),v2=rnorm(50,1,1),v3=rnorm(75,0,2))
data<- melt(x)
ggplot(data,aes(x=value, fill=L1)) + geom_density(alpha=0.25)
ggplot(data,aes(x=value, fill=L1)) + geom_histogram(alpha=0.25)
ggplot(data,aes(x=L1, y=value, fill=L1)) + geom_boxplot()