我使用ggplot2(版本0.9.3.1)在R(版本R版本3.0.1(2013-05-16))中生成了一个简单的图,显示了一组数据的相关系数.目前,绘图右侧的图例颜色条是整个绘图大小的一部分.
我希望图例颜色条与图表的高度相同.我以为我可以使用legend.key.height来做到这一点,但我发现事实并非如此.我调查了网格包单元功能,发现那里有一些标准化单元,但是当我尝试它们时(单位(1,“npc”)),颜色条太高了,离开了页面.
如何使图例与图块本身的高度相同?
一个完整的自包含示例如下:
- # Load the needed libraries
- library(ggplot2)
- library(grid)
- library(scales)
- library(reshape2)
- # Generate a collection of sample data
- variables = c("Var1","Var2","Var3")
- data = matrix(runif(9,-1,1),3,3)
- diag(data) = 1
- colnames(data) = variables
- rownames(data) = variables
- # Generate the plot
- corrs = data
- ggplot(melt(corrs),aes(x = Var1,y = Var2,fill = value)) +
- geom_tile() +
- geom_text(parse = TRUE,aes(label = sprintf("%.2f",value)),size = 3,color = "white") +
- theme_bw() +
- theme(panel.border = element_blank(),axis.text.x = element_text(angle = 90,vjust = 0.5,hjust = 1),aspect.ratio = 1,legend.position = "right",legend.key.height = unit(1,"inch")) +
- labs(x = "",y = "",fill = "",title = "Correlation Coefficients") +
- scale_fill_gradient2(limits = c(-1,expand = c(0,0),low = muted("red"),mid = "black",high = muted("blue"))
解决方法
这看起来很棘手,我得到的最接近的是这个,
- ## panel height is 1null,so we work it out by subtracting the other heights from 1npc
- ## and 1line for the default plot margins
- panel_height = unit(1,"npc") - sum(ggplotGrob(plot)[["heights"]][-3]) - unit(1,"line")
- plot + guides(fill= guide_colorbar(barheight=panel_height))
不幸的是,垂直理由有点偏.