【发布时间】:2016-02-23 20:57:51
【问题描述】:
我正在尝试自动创建必须在不断变化的数据集上定期使用的条形图。 这是一个演示数据格式的示例。数据集中包含的年数和月数是可变的:
plotdata<-data.frame(c(2014, 2015, 2015), c(5, 5, 6), c("example", "example", "example"), c(0.34, 0.44, 0.52))
names(plotdata)<-c('year', 'month', 'name', 'value')
我做了一个函数来创建一个标准的条形图,看起来像这样:
bar_month<-function(x){
lbls<-ifelse(plotdata$month==1, paste("January\n", plotdata$year),
ifelse(plotdata$month==2, paste("February\n", plotdata$year),
ifelse(plotdata$month==3, paste("March\n", plotdata$year),
ifelse(plotdata$month==4, paste("April\n", plotdata$year),
ifelse(plotdata$month==5, paste("May\n", plotdata$year),
ifelse(plotdata$month==6, paste("June\n", plotdata$year),
ifelse(plotdata$month==7, paste("July\n", plotdata$year),
ifelse(plotdata$month==8, paste("August\n", plotdata$year),
ifelse(plotdata$month==9, paste("September\n", plotdata$year),
ifelse(plotdata$month==10, paste("October\n", plotdata$year),
ifelse(plotdata$month==11, paste("November\n", plotdata$year),
ifelse(plotdata$month==12, paste("December\n", plotdata$year),
NA))))))))))))
maxY=max(na.omit(plotdata$value))
maxX<-length(na.omit(plotdata$month))
title<-paste("Monthly Values", as.character(unique(na.omit(x$name))))
bar<-barplot(plotdata$value,
ylim=c(0, maxY),
xlim=c(0, maxX),
main=title,
xlab="Month",
ylab="Value",
cex.names=2.5,
width = c(0.5, 0.5, 0.5))
axis(side=1, labels=lbls, at=bar, las=0, pos=0)
result<-bar
return(result)
}
graph<-bar_month(x)
这很好,但有一个例外。条形的宽度随着数据集中出现的月份数而变化。如果我在给定的数据集中只有几个月的时间,那么我会得到巨大的条形图,这看起来很傻。我想根据我的数据集中值的数量定义最大宽度或可调整的条形宽度。有什么办法可以做到这一点吗?
感谢您的帮助!
【问题讨论】:
-
我想我必须补充一点,在上面的示例中,我将宽度定义为 0.5,因为我想要它。但是,在具有不同数量值的数据集中,我每次都必须调整宽度,这是我想避免的。