2015-11-05 3 views
1

У меня есть вопрос, который кажется очень простым, но я не могу понять. У меня есть набор данных с обработками в течение определенного года. Есть 3 разных лечения. Я хотел бы создать два участка:R и ggplot - распределение участка и линия

Тот, который выглядит следующим образом:

area plot

И тот, который выглядит следующим образом:

scatter plot

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

Допустим, мы имеем последующую ДФ:

y=c(2001,2001,2001,2001,2002,2002,2002,2003,2003,2003,2003,2004,2004) 
t=c("a","a","b","c","a","a","b","c","a","a","b","c","b") 
df=data.frame(y,t) 

Я попытался с помощью

geom_plot() 

Но это не работает. Ближайший я мог иметь R делать пропорции для меня следующий стека гистограмма с использованием кода из другого поста:

p+geom_histogram(aes(y=..density.., color=t , fill=t)) 
+1

Вы можете завершить свой пример? Есть недостающие части (например, что такое p?) – Heroka

+0

p будет составлять% от каждого из них по годам. в приведенном выше df в 2001 году имеется 4 наблюдения. p (a) 2001 будет 0,5, p (b) = .25, p (c) = .25 и т. д. p будет отличаться каждый год. Благодарю. –

+0

Но это не так, как работает ggplot. Ggplot не делает [данные] + [geom]. – Heroka

ответ

1

Для типов диаграмм вы показать, вам нужно вычислить пропорции перед вами участком , Функция table может использоваться для подсчета t по годам и t. ave с sum по y затем вычисляет годовые суммы для пропорций. Ваш первый сюжет сделан с geom_area, а второй - стандартным графиком линии и точки. Код может выглядеть

library(ggplot2) 
y=c(2001,2001,2001,2001,2002,2002,2002,2003,2003,2003,2003,2004,2004) 
t=c("a","a","b","c","a","a","b","c","a","a","b","c","b") 
df=data.frame(y, t) 

# Count number of t's by year 
    df_tab <- as.data.frame(table(df), stringsAsFactors=FALSE) 
# convert counts to percents 
    df <- data.frame(df_tab, p=df_tab$Freq/ave(df_tab$Freq, df_tab$y, FUN=sum)) 
    df$y <- as.numeric(df$y) 
# Set plot colors and themes 
    plot_colours <- c(a="red3", b = "orange", c = "blue") 
    plot_theme <- theme(axis.title = element_text(size = 18)) + 
       theme(axis.text = element_text(size = 18)) + 
       theme(legend.position="top", legend.text=element_text(size=18)) 
# make area plot 
    sp <- ggplot(data=df, aes(x=y, y= 100*p, fill=t)) + geom_area() 
    sp <- sp + scale_fill_manual(values=plot_colours) 
    sp <- sp + labs(x="Year", y = "Percentage of Patients") 
    sp <- sp + plot_theme 
    plot(sp) 

# make line plot 
    sp <- ggplot(data=df, aes(x=y, y=p, colour=t)) 
    sp <- sp + geom_line(aes(ymax=1), position="stack", size=1.05) + geom_point(aes(ymax=1), position="stack", size=4) 
    sp <- sp + scale_colour_manual(values=plot_colours) 
    sp <- sp + labs(x="Year", y = "Proportion Receiving Treatment") 
    sp <- sp + plot_theme 
    plot(sp) 

, который производит графики enter image description here

и

enter image description here

+0

Большое спасибо за вашу помощь - это было очень полезно, и я смог создать нужные мне сюжеты. Просто обновление, мне пришлось удалить «position =» stack », чтобы создать график линии без суммирования пропорций. –

Смежные вопросы