我正在使用ggplot并且有两个图表,我希望彼此叠加显示.我使用grid.arrangegridExtra来堆叠它们.问题是,无论轴标签如何,我都希望图形的左边缘与右边缘对齐.(问题出现是因为一个图的标签很短而另一个图很长).
问题:
我该怎么做?我没有和grid.arrange结婚,但ggplot2是必须的.
我尝试了什么:
我尝试使用宽度和高度以及ncol和nrow来制作2 x 2网格并将视觉效果放在相对的角落然后玩宽度但我无法在对角处获得视觉效果.
require(ggplot2);require(gridExtra)
A <- ggplot(CO2, aes(x=Plant)) + geom_bar() +coord_flip()
B <- ggplot(CO2, aes(x=Type)) + geom_bar() +coord_flip()
grid.arrange(A, B, ncol=1)
Run Code Online (Sandbox Code Playgroud)

随着grid.arrange我可以安排多个ggplot在网格中人物使用类似,实现了多屏图:
library(ggplot2)
library(grid)
library(gridExtra)
Run Code Online (Sandbox Code Playgroud)
然后生成一些ggplot2图
plot5 <- grid.arrange(plot4, plot1, heights=c(3/4, 1/4), ncol=1, nrow=2)
Run Code Online (Sandbox Code Playgroud)
如何获得"不平衡"2 col布局,其中第一个col中有一个绘图,第二个col中有三个绘图?我玩弄了一个'网格网格'方法,试图用grid.arrange一个网格(例如plot5,上面)绘制另一个图,但得到了:
在ArrangeGrob中出错(...,as.table = as.table,clip = clip,main = main,:输入必须是grobs!
更新:
感谢您的建议.我会考虑viewports和grid.与此同时,感谢@DWin,layOut'wq'包中的函数非常适合我Sweave文档中的编译图:

更新2:
该arrangeGrob命令(由@baptiste建议)也运行良好,看起来非常直观 - 至少很容易改变两列的宽度.它还具有不需要`wq'包的好处.
这是我的Sweave文件中的代码:
<<label=fig5plot, echo=F, results=hide>>=
plot5<-grid.arrange(plot4, arrangeGrob(plot1, plot2, plot3, ncol=1),
ncol=2, widths=c(1,1.2))
@
\begin{figure}[]
\begin{center}
<<label=fig5,fig=TRUE,echo=T, width=10,height=12>>=
<<fig5plot>>
@
\end{center}
\caption{Combined plots using the `arrangeGrob' command.}
\label{fig:five}
\end{figure}
Run Code Online (Sandbox Code Playgroud)
产生以下输出:

顺便说一下,有人告诉我为什么出现'> NA'?
使用https://gist.github.com/low-decarie/5886616上的代码 可以生成双树枝状瓷砖图:
dual_dendogram_tile_plot(as.matrix(USArrests),main ="USA Arrests")

问题:将垂直树形图与瓷砖绘图区域对齐.(和/或改善水平树状图的对齐)
这个问题涉及到:
有没有办法在网格窗口中获得绘图区域的宽度?例如,如果plot.margin更改或者y轴标签的font-size增加,它会增大或缩小.隐藏在str(p)哪里?
任何规模的措施都可行.我需要能够在不同的场景中测量绘图区域宽度的相对变化,例如更改y轴标签的font-size.

df = data.frame(x = (1:3),One=c(12, 8, 13),Two=c(13, 7, 11),Three=c(11, 9, 11))
df.melt = melt(df, id.vars="x")
p = ggplot(df.melt, aes(x=x, y=value, color=variable)) +
geom_line() +
coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none", plot.margin = unit(c(1, 4, 1, 1), "cm"))
p
Run Code Online (Sandbox Code Playgroud)
更新 - 澄清:请帮我计算a/b.

p = ggplot(df.melt, aes(x=x, y=value, color=variable)) +
geom_line() + coord_cartesian(xlim=c(min(df.melt$x),max(df.melt$x))) +
theme(legend.position="none")
p1 = p + theme(plot.margin=unit(c(1,1,1,1),"cm"), axis.text.y=element_text(size=10))
p2 = p + theme(plot.margin=unit(c(1,1,1,2),"cm"), axis.text.y=element_text(size=30))
grid.arrange(p1, p2, ncol=2)
Run Code Online (Sandbox Code Playgroud) 我有一个决策树表示为R中的列表:
tree = list(
"Bin type" = list(
"no bin" = list(
"SOA linearity" = list(
"linear" = list("Linear MEM")
, "non-linear" = list("GAMM")
)
)
, "bin" = list(
"SOA type" = list(
"SOA as categorical" = list(
"Tool" = list(
"ANOVA"
, "MEM"
)
)
, "SOA as continuous" = list(
"SOA linearity" = list(
"linear" = list(
"Tool" = list(
"ANOVA"
, "MEM"
)
)
, "non-linear" = list("GAMM")
)
)
)
)
)
)
Run Code Online (Sandbox Code Playgroud)
有没有一种快速的方法可以将其可视化为树形图?
我有以下脚本:
library("gplots")
mydata <- mtcars
mydata.nr <- nrow(mydata)
mydata.newval <- data.frame(row.names=rownames(mydata),new.val=-log(runif(mydata.nr)))
# Functions
hclustfunc <- function(x) hclust(x, method="complete")
distfunc <- function(x) dist(x,method="euclidean")
# Set colors
hmcols <- rev(redgreen(256));
# Plot the scaled data
heatmap.2(as.matrix(mydata),dendrogram="row",scale="row",col=hmcols,trace="none", margin=c(8,9), hclust=hclustfunc,distfun=distfunc);
Run Code Online (Sandbox Code Playgroud)
其中生成以下热图:

现在给出一个新的data.frame,其中包含每辆车的新值:
mydata.nr <- nrow(mydata)
mydata.newval <- data.frame(row.names=rownames(mydata),new.val=-log(runif(mydata.nr)))
Run Code Online (Sandbox Code Playgroud)
我想创建一个单列热图,其中渐变灰色位于行名旁边.如何在R heatmap中实现这一点?
我想用kmeans聚类一个矩阵,并能够将其绘制为热图.这听起来很微不足道,我看过很多像这样的情节.我试图google atround,但找不到绕道而行的方法.
我希望能够在这个图上绘制类似A或B的图.假设我有一个250行和5列的矩阵.我不希望对列进行聚类,只是对行进行聚类.
m = matrix(rnorm(25), 250, 5)
km = kmeans(m, 10)
Run Code Online (Sandbox Code Playgroud)
那么如何将这10个聚类作为热图进行绘制?您的评论和帮助非常受欢迎.
谢谢.

我目前正在使用ggplot函数在R中生成热图.在下面的代码中..我首先将数据读入数据帧,删除任何重复的行,分解时间戳字段,融合数据帧(根据'timestamp'),缩放0和1之间的所有变量,然后绘制热图.
在得到的热图中,时间在x轴上绘制,并且每个iostat-sda变量(参见下面的样本数据)沿y轴绘制.注意:如果要尝试R代码 - 可以将下面的示例数据粘贴到名为iostat-sda.csv的文件中.
但是我真的需要能够对这个热图中的行进行聚类...任何人都知道如何使用ggplot函数实现这一点?
任何帮助将非常感谢!!
############################## The code
library(ggplot2)
fileToAnalyse_f <- read.csv(file="iostat-sda.csv",head=TRUE,sep=",")
fileToAnalyse <- subset(fileToAnalyse, !duplicated(timestamp))
fileToAnalyse[,1]<-factor(fileToAnalyse[,1])
fileToAnalyse.m <- melt(fileToAnalyse, id=1)
fileToAnalyse.s <- ddply(fileToAnalyse.m, .(variable), transform, rescale = rescale(value) ) #scales each variable between 0 and 1
base_size <- 9
ggplot(fileToAnalyse.s, aes(timestamp, variable)) + geom_tile(aes(fill = rescale), colour = "black") + scale_fill_gradient(low = "black", high = "white") + theme_grey(base_size = base_size) + labs(x = "Time", y = "") + opts(title = paste("Heatmap"),legend.position = "right", axis.text.x = theme_blank(), axis.ticks = …Run Code Online (Sandbox Code Playgroud) 我试图以相同的png或pdf并排显示两个或更多热图。在这种情况下,布局或mfcol不起作用。有人可以帮我这个忙。
我想创建一个带有水平标签的树状图,但让叶子根据其高度悬挂,而不是仅仅掉落到图的边缘。
例子:
par(mfrow = c(1,2))
hc <- hclust(dist(USArrests), "ave")
plot(hc) # a plot with hanging branches
plot(as.dendrogram(hc), horiz = TRUE) # a horizontal plot, but the branches are not hanging
Run Code Online (Sandbox Code Playgroud)

关于如何编程有什么建议吗?
谢谢。