在 ggplot2 中创建散点图矩阵(pairs() 等效项)
是否可以使用 ggplot2 绘制散点图矩阵,使用 ggplot2 的出色功能(例如将其他因素映射到颜色、形状等并添加平滑器)?
我正在考虑类似于 base
函数 pairs
的东西。
Is it possible to plot a matrix of scatter plots with ggplot2
, using ggplot
's nice features like mapping additional factors to color, shape etc. and adding smoother?
I am thinking about something similar to the base
function pairs
.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
我一直想这样做,但绘图矩阵很糟糕。 Hadley 建议使用GGally 包 代替。它有一个函数 ggpairs ,它是大大改进了对图(允许您在数据框中使用非连续变量)。它根据变量类型在每个方块中绘制不同的图:
I keep wanting to do this, but plotmatrix is crap. Hadley recommends using the GGally package instead. It has a function, ggpairs that is a vastly improved pairs plot (lets you use non-continuous variables in your data frames). It plots different plots in each square, depending on the variable types:
您可能想尝试plotmatrix:
对我来说,mpg(mtcars 中的第一列)不应该成为一个因素。我还没有检查过,但没有理由说它应该是一个。不过我得到了一个散点图:)
注意:为了将来的参考,
plotmatrix()
函数已被ggpairs()
函数取代@naught101 在下面的另一个回复中建议使用GGally
包。You might want to try plotmatrix:
to me mpg (first column in mtcars) should not be a factor. I haven't checked it, but there's no reason why it should be one. However I get a scatter plot :)
Note: For future reference, the
plotmatrix()
function has been replaced by theggpairs()
function from theGGally
package as @naught101 suggests in another response below to this question.如果想要获得一个 ggplot 对象(而不是像 ggpairs() 那样的 ggmatrix ),解决方案是融化数据两次,然后使用分面进行 ggplot。如果提供了
scales = 'free'
参数,在限制绘制区域方面,facet_wrap
会比facet_grid
更好。If one wants to obtain a
ggplot
object (notggmatrix
as in case ofggpairs()
), the solution is to melt the data twice, thenggplot
with facetting.facet_wrap
would be better thanfacet_grid
in limiting the plotted area, given thescales = 'free'
parameter is supplied.尝试 scatterPlotMatrix。它非常灵活,可以生成漂亮的交互式图表。
Try scatterPlotMatrix. It's very flexible and produces nice looking interactive charts.
稍后,我附上一个不使用 dplyr 的替代方案:
a bit later, i attach an alternative that is not using dplyr:
如果您只想使用 ggplot2 进行绘图,这里有一个类似于 @mjktfw 提出的解决方案,但代码更短,也许更清晰:
If you only want to use
ggplot2
for plotting, here is a solution similar to the one proposed by @mjktfw but with a shorter, perhaps cleaner code: