如何创建具有特定于每个构面的标题和字幕的构面图? [英] How to create a facetted plot with title and subtitle specific to each facet?

查看:251
本文介绍了如何创建具有特定于每个构面的标题和字幕的构面图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

为每个带有标题和字幕的列以及每个图的垂直线生成一个图,该图与单独的图结合在一起:

Generating a plot combined with separate plots for each column with title and subtitles, along with a vertical line for each plot:

我已经使用直方图为具有垂直线的列创建了

I have created using the histogram plot for a column with a vertical line.

library(ggplot2)
library(gridExtra)
library(tidyr)

actualIris <- data.frame(Sepal.Length=6.1, Sepal.Width=3.1, Petal.Length=5.0, Petal.Width=1.7)

# Sepal Length
oneTailed <- sum(actualIris$Sepal.Length < iris$Sepal.Length)/nrow(iris)

plot1SL <- ggplot(iris, aes(x=Sepal.Length)) + geom_histogram() + 
  geom_vline(xintercept = actualIris$Sepal.Length, col = "blue", lwd = 2) + 
  labs(title='Distribution of Sepal Length', x='Sepal Length', y='Frequency',
       subtitle=paste('one-tailed test=', oneTailed, sep='')) + theme_bw()

下面的代码只是其他三列的重复. (您可以忽略它).

The below code is just repetition of three other columns. (You can ignore it).

# Sepal Width
oneTailed <- sum(actualIris$Sepal.Width < iris$Sepal.Width)/nrow(iris)

plot1SW <- ggplot(iris, aes(x=Sepal.Width)) + geom_histogram() + 
  geom_vline(xintercept = actualIris$Sepal.Width, col = "blue", lwd = 2) + 
  labs(title='Distribution of Sepal Width', x='Sepal Width', y='Frequency',
       subtitle=paste('one-tailed test=', oneTailed, sep='')) + theme_bw()

# Petal Length
oneTailed <- sum(actualIris$Petal.Length < iris$Petal.Length)/nrow(iris)

plot1PL <- ggplot(iris, aes(x=Petal.Length)) + geom_histogram() + 
  geom_vline(xintercept = actualIris$Petal.Length, col = "blue", lwd = 2) + 
  labs(title='Distribution of Petal Length', x='Petal Length', y='Frequency',
       subtitle=paste('one-tailed test=', oneTailed, sep='')) + theme_bw()

# Petal Width
oneTailed <- sum(actualIris$Petal.Width < iris$Petal.Width)/nrow(iris)

plot1PW <- ggplot(iris, aes(x=Petal.Width)) + geom_histogram() + 
  geom_vline(xintercept = actualIris$Petal.Width, col = "blue", lwd = 2) + 
  labs(title='Distribution of Petal Width', x='Petal Width', y='Frequency',
       subtitle=paste('one-tailed test=', oneTailed, sep='')) + theme_bw()

# Combine the plots
grid.arrange(plot1SL, plot1SW, plot1PL, plot1PW, nrow=1)

其结果如下图所示:

创建长数据后,我尝试使用facet_wrap创建单个图,而不是组合多个单个图.

I have tried to create the single plot using facet_wrap instead of combining multiple single plots, after creating the long data.

tmp <- iris[,-5] %>% gather(Type, value)
#actualIris <- data.frame(Sepal.Length=6.1, Sepal.Width=3.1, Petal.Length=5.0, Petal.Width=1.7)
actuals <- data.frame(col1=colnames(actualIris), col2=as.numeric(actualIris[1,]))
tmp$Actual <- actuals$col2[match(tmp$Type, actuals$col1)]
tmp$Type <- factor(tmp$Type, levels = c('Petal.Length', 'Petal.Width', 'Sepal.Length', 'Sepal.Width'), 
                   labels = c('Petal Length', 'Petal Width', 'Sepal Length', 'Sepal Width'))
ggplot(tmp, aes(value)) + facet_wrap(~Type, scales="free", nrow = 1) + geom_histogram() + 
  geom_vline(aes(xintercept=Actual), colour="blue", lwd=2) 

我尝试使用labeller选项更改构面标签,但是没有用. (但是,这不是主要问题.)

I have tried to change the facet labels using the labeller option but it did not work. (However, this is not the main question.)

ggplot(tmp, aes(value)) + geom_histogram() + 
  facet_wrap(~Type, scales="free", nrow = 1, 
             labeller = as_labeller(paste('Distribution of ', levels(~Type), sep=''))) + 
  geom_vline(aes(xintercept=Actual), colour="blue", lwd=2) 

如何使用创建的长数据tmp创建与第一个图相似的图?

How to create the plot similar to the first plot using the long data tmp created?

推荐答案

您可以定制两行标签:

labels <- c(paste('Petal Length\none-tailed test=', round(sum(actualIris$Sepal.Length < iris$Sepal.Length)/nrow(iris), 2)),
            paste('Petal Width\none-tailed test=', round(sum(actualIris$Sepal.Width < iris$Sepal.Width)/nrow(iris), 2)),
            paste('Sepal Length\none-tailed test=', round(sum(actualIris$Petal.Length < iris$Petal.Length)/nrow(iris), 2)),
            paste('Sepal Width\none-tailed test=', round(sum(actualIris$Petal.Width < iris$Petal.Width)/nrow(iris), 2)))

tmp <- iris[,-5] %>% gather(Type, value)
actuals <- data.frame(col1=colnames(actualIris), col2=as.numeric(actualIris[1,]))
tmp$Actual <- actuals$col2[match(tmp$Type, actuals$col1)]
tmp$Type <- factor(tmp$Type, levels = c('Petal.Length', 'Petal.Width', 'Sepal.Length', 'Sepal.Width'), 
                   labels = labels)
ggplot(tmp, aes(value)) + facet_wrap(~Type, scales="free", nrow = 1) + geom_histogram() + 
  geom_vline(aes(xintercept=Actual), colour="blue", lwd=2) 

并得到这个:

这篇关于如何创建具有特定于每个构面的标题和字幕的构面图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆