ggplot2 - 如何使用主要和次要y轴在同一图表上绘制具有不同比例的两个变量?

时间:2013-03-03 16:47:22

标签: r ggplot2 boxplot

数据链接:

Data

代码:

    distevyield <- read.csv(file = "F:/Purdue University/RA_Position/PhD_ResearchandDissert/PhD_Draft/GTAP-CGE/GTAP_NewAggDatabase/NewFiles/GTAP_DistEVYield.csv", header=TRUE, sep=",", na.string="NA", dec=".", strip.white=TRUE)

    str(distevyield)
    distevyield <- as.data.frame(distevyield)
    distevyield[5:6] <- sapply(distevyield[5:6],as.numeric)
    distevyield <- droplevels(distevyield)
    distevyield <- transform(distevyield,region=factor(region,levels=unique(region)))
    library(ggplot2)

    distevyield.f <- melt(subset(distevyield, region !="World"))

    Figure3 <- ggplot(data = distevyield.f, aes(factor(variable), value)) 
    Figure3 + geom_boxplot() +
    theme(axis.text.x = element_text(colour = 'black', angle = 90, size = 15, hjust = 1, vjust = 0.5),axis.title.x = element_blank()) + 
    theme(axis.text.y = element_text(colour = 'black', size = 15, hjust = 0.5, vjust = 0.5), axis.title.y = element_blank()) + 
    theme(strip.text.x = element_text(size = 14, hjust = 0.5, vjust = 0.5, face = 'bold')) +
    facet_wrap(~region, scales="free_y")

结果: Plot result

问题:

我绘制的两个变量,产量(变化百分比)和ev(百万美元)具有不同的单位。有没有办法为其中一个变量添加辅助y轴,以便用一个表示其原始单位的箱线图显示每个变量,但是在同一个图中? ggplot2中是否存在此功能以开始?

谢谢!

1 个答案:

答案 0 :(得分:5)

使用ggplot2,你不能制作两个y轴(see explanation/discussion)。

要表示evyield的不同轴值,您必须在不同的图中绘制它们。实现此目标的一种方法是使用facet_wrap()并合并regionvariable值。使用facet_wrap(),您将同时获得两个图表,并且您将能够控制要显示的列数。

ggplot(data = distevyield.f, aes(factor(1), value)) +
  geom_boxplot() +  facet_wrap(region~variable,scales="free",ncol=8)+
  theme(axis.text.x=element_blank(),
        axis.title.x=element_blank(), 
        axis.title.y = element_blank())

enter image description here