如何绘制多个直方图而不在R中重叠

时间:2016-02-14 12:49:00

标签: r plot

如果没有安装额外的库,你能告诉我有没有办法在R中动态绘制多个直方图,而不需要重叠。动态地绘制直方图,并改变列数。下面的代码只有4列,但可以在2到20列之间进行更改。

示例情节

enter image description here

我的代码

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

这只绘制最后一个直方图

2 个答案:

答案 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"))

预览

Facets: Histogram