2017-09-18 44 views
0

我有600個回覆者的數據集。我在5年 - 2013年,2014年,2015年,2016年和2017年對600名受訪者中的每一位都有一些指標值。另外,我還爲每位受訪者設置了城市專欄。我想創建一個情節 - 在這裏我使用線圖爲600名受訪者中的每一個繪製指標 - 每個受訪者一個線形圖,使得Y軸具有指標值,X軸具有數年。我已將城市線圖的顏色分開。此外,我想增加一個單獨的中位數指標線,以便每個城市的受訪者都有一條中線。我能夠創建一個綜合中值線,但如果我嘗試繪製多箇中值,則會出現錯誤。這裏是我使用的代碼 -在面板數據的單個繪圖中繪製多箇中間值

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 

sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 

df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 

df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =1), fun.y=median, geom = "line", color = "black", size = 1) 

注意:這僅僅是虛擬數據,以便圖形是對稱的...... 我使用下面的代碼進行多中線嘗試,但我得到的錯誤 - 錯誤:美學必須是長度爲1或相同的數據(5):顏色,大小

stat_summary(aes(y = Indicator, group =1), fun.y=median, colour=city, geom="line", size =1) 

我環顧四周,文檔和其它的R博客文章,但沒有找到有用的東西。

回答

1

如果我理解正確的,你,你只需要改變group參數的城市,而不是1:

stat_summary(aes(y = Indicator, group =city)... 

全碼:

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 
sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 
df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 
df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =city), fun.y=median, geom = "line", color = "black", size = 1) 

此外顏色參數不能外aes()如果你使用諸如column:city這樣的變量名,這裏是正確的方法,如果你想讓城市有顏色的線條:

stat_summary(aes(y = Indicator, group =city, color = city), fun.y=median, geom="line", size =1) 

[答案問題在註釋]

下面是完整的代碼:

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(magrittr) 
sample_no <- c(1:600) 
city <- c(rep("A",150), rep("B",250), rep("C", 200)) 
indicator_2013 <- runif(600, min=0, max=1000) 
indicator_2014 <- runif(600, min=0, max=1000) 
indicator_2015 <- runif(600, min=0, max=1000) 
indicator_2016 <- runif(600, min=0, max=1000) 
indicator_2017 <- runif(600, min=0, max=1000) 
df <- data.frame(sample_no, city, indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017) 
df1 <- df %>% 
    gather(indicator_2013, indicator_2014, indicator_2015, indicator_2016, indicator_2017, key="Year", value = "Indicator") 
df1 %>% 
    ggplot(aes(x=Year, y=Indicator, color=as.factor(city))) + 
    geom_line(aes(group = sample_no), alpha = .5, size = 0.7) + 
    labs(col = "City") + 
    stat_summary(aes(y = Indicator, group =city), fun.y=median, geom = "line", color = "black", size = 1) + scale_x_discrete(expand=c(0,0)) 

你只需要添加scale_x_discrete(expand=c(0,0))把空格去掉,並從第一個因子開始x軸水平。

+0

非常感謝!我有兩個後續問題 - 1. stat_summary中的group有哪些不同的值?什麼時候使用1?我擡頭看了一下?stat_summary,但那並不多。 2.在使用此代碼生成的圖形中,很多繪圖空間在座標(0,0)和第一個x-asix刻度標籤之間被浪費,類似於最後一個x-asis刻度標籤和圖形結束處的位置。這怎麼能減少?也許這應該是另一篇文章,但我查了很多ggplot文檔,但沒有找到任何東西。 – user3816784

+1

group = 1表示你想要連接所有點的單行 –

+0

我已經在主要答案 –

相關問題