使用ggplot2的条形图/折线图

时间:2017-10-22 15:36:16

标签: r ggplot2

我刚刚开始学习R并遇到了关于图形构建的问题。

我有一个df,其中str(df)给出了

Date : chr  
Hour : int  
Street 1: int  
Street 2: int  
..  
Street 15: int  

其中日期是每月的每一天,小时是一天中的每个小时,街道的数据显示当天小时的街道流量。

我想在ggplot上制作一个条形图,其中显示了当月每条街道的总流量,以显示交通最繁忙的街道,但是当我尝试使用ggplot制作图表时,还包括小时数据破坏图表。

我查看了堆栈溢出时已经提出的各种问题,并尝试将数据融化,但要么我做错了,要么它不适合我的数据,因为它仍然无法正常工作。<登记/> 通过这样做,我能够达到一个非常简单的解决方案:

df2 <- colSums(df[3:15], na.rm = TRUE)  
barplot(df2, las=2, xlab="Street", ylab="Amount of People", main="Pedestrian Traffic For January", cex.lab=0.75, ylim=c(0,1500000))  

但是这个图表非常基础,我无法修改x轴标签。

我还想制作一个线图,显示街道每小时的总流量,但我认为因为有多个小时数据值(例如1/1的小时1的数据,然后是2/1的小时1)等等)线图不显示一行。

编辑:
head(df):街道比较多,但为了格式化,我只发布了前三条街道的数据。

    Date       Hour     Street 1                Street 2            Street 3
1 01/01/2014    0          1544                   893                   404
2 01/01/2014    1          1401                   224                   179
3 01/01/2014    2           608                   127                    97
4 01/01/2014    3           360                   108                    74
5 01/01/2014    4           156                    75                    33
6 01/01/2014    5            69                    20                     8

1 个答案:

答案 0 :(得分:0)

因为我没有您使用的实际数据,所以我只生成了一个随机数据集。

require(tidyverse)

# Random Data
df <- data.frame(date = seq(31), hour = rep(seq(24), 31), Street1 = 
                                        rpois(24*31, 5), 
                                        Street2 = rpois(24*31, 10),
                                        Street3 = rpois(24*31, 15))

# Transform to long format
df %>%
  gather(key, value,-date, -hour) -> df

# Create bar chart
g <- ggplot(df, aes(x = as.factor(key), y = value))
g <- g + geom_bar(stat="identity")
g <- g + xlab("Street") + ylab("Pedestrian Traffic for January")
g

此代码将输出以下Plot: enter image description here

您可以通过更改“键”列的因子标签轻松更改x标签。

可以通过以下代码创建折线图:

# Summarize the hourly data
df %>%
  group_by(date,key) %>%
  summarise(value = sum(value)) -> df

g <- ggplot(df, aes(x = date, y = value, color = key))
g <- g + geom_line()
g

这将输出以下图表: enter image description here