这是我的一个数据表的摘录:
YR POPSTAT Freq
2001 0 34
2002 0 45
2003 0 32
2015 0 16
2001 1 7
2002 1 11
2003 1 8
2014 1 7
2015 1 3
我想绘制所有POPSTAT> 0的每年频率直方图(YR)。这些都不是显而易见的:
for (POPSTAT>0) barplot(table.popstat$Freq)
plot(table.popstat$Freq~table.popstat$YR)
我还需要多年才能在x轴上。任何帮助将不胜感激。
答案 0 :(得分:1)
如果要按年拆分数据,则需要使用循环或ggplot
require(ggplot2)
ggplot(subset(table.popstat, POPSTAT != 0), aes(x = Freq)) + geom_histogram() + facet_wrap(~YR)
您也可以考虑使用boxplot
ggplot(subset(table.popstat, POPSTAT != 0), aes(x = YR, y = Freq)) + geom_boxplot()
答案 1 :(得分:1)
有两种方法可以做到这一点,但首先您需要获得符合您标准的数据子集(POPSTAT>0
)。
plotdata <- dput(plotdata)
structure(list(YR = c(2001L, 2002L, 2003L, 2015L, 2001L, 2002L,
2003L, 2014L, 2015L), POPSTAT = c(0L, 0L, 0L, 0L, 1L, 1L, 1L,
1L, 1L), Freq = c(34L, 45L, 32L, 16L, 7L, 11L, 8L, 7L, 3L)), .Names = c("YR",
"POPSTAT", "Freq"), class = "data.frame", row.names = c(NA, -9L
))
plt_df <- subset(plotdata,POPSTAT>0,select = c(1,3)) #You only want the Year and Freq columns
基础R
bplot <- barplot(plt_df$Freq, plt_df$YR, ylim = c(0,13),axes=F)
axis(1,at=bplot,labels=plt_df$YR)
axis(2,seq(0,15,3),c(0,3,6,9,12,15))
ggplot package
install.packages('ggplot2')
library(ggplot2)
ggplot(plt_df, aes(x=YR,y=Freq)) + geom_bar(stat='identity')
希望它有所帮助。
答案 2 :(得分:1)
这可以通过两个步骤完成:过滤,绘图和单行:
with(subset(df, POPSTAT > 0), barplot(Freq, names.arg=YR))
如果您更喜欢ggplot2
:
library(ggplot2)
ggplot(subset(df, POPSTAT > 0)) + aes(x=YR, y=Freq) + geom_bar(stat='identity')
以下是您的dput
数据,因此您的示例为reproducible。
df <- structure(list(YR = c(2001L, 2002L, 2003L, 2015L, 2001L, 2002L,
2003L, 2014L, 2015L), POPSTAT = c(0L, 0L, 0L, 0L, 1L, 1L, 1L,
1L, 1L), Freq = c(34L, 45L, 32L, 16L, 7L, 11L, 8L, 7L, 3L)),
.Names = c("YR", "POPSTAT", "Freq"),
class = "data.frame", row.names = c(NA, -9L))