具有分层分类变量的线图

时间:2015-06-29 22:46:06

标签: r data-visualization categorical-data

我想重现R中附图中的图形。注意x轴包含分类变量(小时和天)。在y轴上可以有多条线(例如,列ETR)。我不得不删除当天的一些条目,否则Excel会在较低层重复它(可能有一种方法可以避免在Excel中执行此操作?)。

谢谢。

修改

原始数据库文件为here

enter image description here

2 个答案:

答案 0 :(得分:0)

我不会说您的x轴是从分类变量映射的。相反,情节看起来像是一个直截了当的时间序列图。我要重现它的步骤可能是:1)读入日期,时间和y值。 2)使用动物园包的na.locf函数填写“缺失”日期。 3)将日期和时间合并到datetime列,可能使用as.POSIXlt(paste(...),format = ...)。 4)如果需要操作数据,则使用zoo包创建时间序列。 5)使用普通R或ggplot进行绘图。

答案 1 :(得分:0)

这是根据目前发布的评论解决问题的可行方法。还有一些东西缺失,我不知道该怎么做。例如,x轴上的两个图层如Excel图表所示(一个图层用于时间,一个图标用于一天)。此外,切片数据的部分会产生一个带有NA的行,不知道为什么。

非常感谢您的帮助!

修改

固定代码并添加"比例"建议。

## Read data
data <- read.csv("http://rredc.nrel.gov/solar/old_data/nsrdb/1991-2005/data/tmy3/722287TYA.CSV",skip=1,header=TRUE)

## Construct data frame (add any columns as needed)
data.df <- data.frame(ts=as.POSIXct(paste(data$Date..MM.DD.YYYY.,data$Time..HH.MM.),format = "%m/%d/%Y %H:%M"),
                      GHI=data$GHI..W.m.2.,
                      GHIunc=data$GHI.uncert....)

## Window of data
ts.start <- as.POSIXct("1/1/1991 1:00",format="%m/%d/%Y %H:%M")
ts.end <- as.POSIXct("1/5/1991 1:00",format="%m/%d/%Y %H:%M")

## Slice data
data.df.window <- data.df[data.df$ts >= ts.start,]
data.df.window <- data.df.window[data.df.window$ts <= ts.end,]
row.names(data.df.window) <- NULL

## Example of plotting
library(ggplot2)
library(scales)

# Uncertainty in GHI data
GHI.lo <- data.df.window$GHI*(1 - data.df.window$GHIunc/100)
GHI.up <- data.df.window$GHI*(1 + data.df.window$GHIunc/100)

m <- ggplot(data.df.window,aes(x=data.df.window$ts,y=data.df.window$GHI)) +
  geom_line() +
  labs(title = "Global Horizontal Irradiance (Wh/m^2)",x="Date",y="") +
  theme(text = element_text(size=20)) +
  geom_ribbon(data=data.df.window,aes(ymin=GHI.lo,ymax=GHI.up),alpha=0.3,fill='blue') +
  scale_x_datetime(labels=date_format("%m/%d/%Y"),breaks=date_breaks("1 day"),minor_breaks=date_breaks("1 hour"))
print(m)

enter image description here