如果没有安装额外的库,你能告诉我有没有办法在R中动态绘制多个直方图,而不需要重叠。动态地绘制直方图,并改变列数。下面的代码只有4列,但可以在2到20列之间进行更改。
示例情节
我的代码
tic
A = rand(100,101);
[data(:,1), data(:,2), data(:,3)] = find(A);
data = sortrows(data,[1 2]);
toc
tic
B = A' ;
[data_B(:,1), data_B(:,2)] = ind2sub(size(B), 1:length(B(:)));
data_B(:,3) = B(:);
toc
这只绘制最后一个直方图
答案 0 :(得分:6)
如果您想在同一个屏幕中有多个图表,可以使用命令
par(mfrow = c(2,1))
其中c(2,1)表示您希望拥有2行1列图表,并将图表并排放置。如果你输入c(1,3),你会告诉R将你的图表分为1行和3列,依此类推。
然后只是一个接一个地绘制你的图表,它们将填充相应的空间。
编辑:如果你想自动计算par函数的行和列,你可以创建一个这样的函数(或更精致的东西并将其传递给par)
dimension = function(df){
kk = dim(df)[2];
x = round(sqrt(kk),0);
y = ceiling(kk/x);
return(c(x,y))
}
成为您的代码
set.seed(3)
Ex <- xts(1:100, Sys.Date()+1:100)
df = data.frame(Ex,matrix(rnorm(100*4,mean=123,sd=3), nrow=100))
df<-df[,-1]
par(mfrow = dimension(df))
for(i in names(df)){
hist(df[[i]] ,main="Histogram",xlab="x",col="green",label=TRUE,plot = TRUE)
}
答案 1 :(得分:4)
如果您有兴趣使用 dplyr
/ tidyr
和ggplot2
,可以使用以下代码。我们的想法是收集您想要显示的变量,然后将生成的类别传递给ggplot2
中的 facets 。通过使用facet_grid
/ facet_wrap
和基本data.frame
转换,这将为您在排列图表方面提供很大的灵活性。就个人而言,我发现dplyr
/ ggplot2
组合在使用较长的工作流程时非常强大且令人愉悦。
# Libs and data
Vectorize(require)(package = c("ggplot2", "ggthemes", "tidyr", "dplyr",
"xts"),
character.only = TRUE)
set.seed(3)
Ex <- xts(1:100, Sys.Date()+1:100)
df = data.frame(Ex,matrix(rnorm(100*4,mean=123,sd=3), nrow=100))
df<-df[,-1]
# Chart and data transformations
df %>%
# Reshape
gather(key = indicator, value = val) %>%
# Basic chart
ggplot(aes(x = val)) +
geom_histogram(colour = "darkgreen", fill = "gray") +
facet_wrap(~indicator, nrow = 2) +
## Theme and looks
theme_economist() +
ggtitle("Histograms") +
theme(strip.background = element_rect(fill = "gray80", colour = "black",
size = 0.5, linetype = "solid"),
strip.text = element_text(face = "bold"))