我有这个数据框,这是一个日常数据。对于每一天,我都有每个文件系统的可用空间。我喜欢这个图。我想将每个文件系统放在自己的列上以创建R图。我怎么能这样做呢。如果不将它们移动到自己的列中,我可以为每天的每个文件系统创建一个图表吗?
Date fileSystem FreeSpace
2011-12-03 /var 99.785
2011-12-03 /opt 30.494
2011-12-03 /tmp 55.643
2011-12-03 /data 37.846
2011-12-03 /ora 0.578
2011-12-04 /var 99.785
2011-12-04 /opt 30.494
2011-12-04 /tmp 55.643
2011-12-04 /data 37.846
2011-12-04 /ora 0.578
答案 0 :(得分:2)
R中有很多种可能性......这样的事情? 但是,如果你想每天为每个文件系统和进行绘图,那么只有一个吧(如果它非常有用的话,请不要这样做......)。
df <- read.table(header = TRUE, text = "Date fileSystem FreeSpace
2011-12-03 /var 99.785
2011-12-03 /opt 30.494
2011-12-03 /tmp 55.643
2011-12-03 /data 37.846
2011-12-03 /ora 0.578
2011-12-04 /var 99.785
2011-12-04 /opt 30.494
2011-12-04 /tmp 55.643
2011-12-04 /data 37.846
2011-12-04 /ora 0.578
")
## using ggplot (dates are faceted)
require(ggplot2)
ggplot(df, aes(x = fileSystem, y = FreeSpace)) +
geom_bar() +
facet_wrap(~Date)
修改强> 或者作为折线图。 R中几乎所有东西都是可能的,但你必须考虑你想要的那种情节......
df$Date <- strptime(df$Date, format="%Y-%m-%d")
ggplot(df, aes(x = Date, y = FreeSpace)) +
geom_line() +
facet_wrap(~fileSystem)
<强> EDIT2:强> Perhabs这个?在这里,我为每个带有for循环的文件系统制作一个图。这些图存储在一个列表中。
# or as a line chart
df$Date <- strptime(df$Date, format="%Y-%m-%d")
plotlist <- vector(mode="list", length(levels(df$fileSystem)))
for(i in levels(df$fileSystem)){
tempdf <- df[df$fileSystem == i, ]
plotlist[[i]] <- ggplot(tempdf, aes(x = Date, y = FreeSpace)) +
geom_line() +
opts(title = i)
}
plotlist[["/data"]]
plotlist[["/var"]]
答案 1 :(得分:2)
使用lattice :: xyplot,你有很多选择:
require(lattice)
xyplot(FreeSpace ~ Date + fileSystem, data=df1)
xyplot(FreeSpace ~ Date | fileSystem, data=df1)
xyplot(FreeSpace ~ Date , group= fileSystem, data=df1)
xyplot(FreeSpace ~ Date , group= fileSystem, data=df1, type="b")
基础barplot
的点阵等价物为barchart
:
barchart(FreeSpace ~ Date | fileSystem, data=df1)
答案 2 :(得分:1)
您的数据很难以该格式读取;这是一个可重现的版本:
DF <-
structure(list(Date = structure(c(15311, 15311, 15311, 15311,
15311, 15312, 15312, 15312, 15312, 15312), class = "Date"), fileSystem = structure(c(5L,
2L, 4L, 1L, 3L, 5L, 2L, 4L, 1L, 3L), .Label = c("/data", "/opt",
"/ora", "/tmp", "/var"), class = "factor"), FreeSpace = c(99.785,
30.494, 55.643, 37.846, 0.578, 99.785, 30.494, 55.643, 37.846,
0.578)), .Names = c("Date", "fileSystem", "FreeSpace"), row.names = c(NA,
-10L), class = "data.frame")
我还会展示ggplot2
的示例:
library("ggplot2")
library("scales")
这使用网格刻面而不是像@ EDi的答案那样包装。一个不比另一个更正确;这取决于你想要什么。
ggplot(DF, aes(x=Date, y=FreeSpace)) +
geom_point() +
geom_line() +
scale_x_date(breaks=date_breaks("1 day")) +
facet_grid(fileSystem~.)
您的另一个问题是如何重塑数据。
library("reshape2")
DF.wide <- dcast(DF, Date~fileSystem, value.var="FreeSpace")
给出了
> DF.wide
Date /data /opt /ora /tmp /var
1 2011-12-03 37.846 30.494 0.578 55.643 99.785
2 2011-12-04 37.846 30.494 0.578 55.643 99.785
可以根据需要绘制单个列。