首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

拼图?我掐指一算,发现事情没那么简单!

拼图很容易,像上面这张图,就是三张图拼在一起,但你仔细看一下,这结果可能不是你想要的,如果我们想要坐标轴按照值的大小对齐呢?

首先来一段产生上面图片的代码:

我确实是加了的,但就是不对齐!要对齐真的不容易,因为有两个因素在影响:

坐标轴的取值范围

画布的扩充区域

这两个因素必须要一致才好对齐。要搞也挺容易,标尺可以设定limits和expand两个参数,一次解决。要是使用或就只能解决第一部分。虽然有标记可以解决,但依然不容易啊。比如说的x轴取值是[4,8],我们设一下看看:

4和8的柱子都不见了,为何?因为会去过滤数据啊,柱子是用矩形画的,这矩形有四个点,比如以4为中心的这个矩形,4个点有两个小于4,两个大于4,那小于4的被干掉了,矩形就画不出来了。然后我们试试用标尺,给它扩充一些区域:

一方面确实如我们所想,x轴从[4,8]扩充到了[3,9],但柱子还是不见了,因为先干事,干完再扩充,该没的还是没有了。

这告诉我们一个什么事情?我们不能简单地从这些输入的数据集中计算range,取个并集了事,这是第二点,做完第二点得搞一下第一点,才能统一。然后还有第三点,如果连续型的数值,第一点容易搞,把limit range变大一点,但如果是字符型的,想想都觉得好难!然后还有第四点,你的输入可能不是一个data.frame,比如的输入是一个树对象,还有各种封装的函数,你的输入可能进行了各种操作之后,才来画图,然后就算你拿到了最终画图的data.frame,你还得拿到映射关系,到底什么变量映射到坐标轴上,在这基础上,才能谈什么1,2,3点。

得先扩limits,再去卡limits!

要在几个图中统一limits,并不简单。

如果是字符型的变量,怎么搞?

如果你根本不知道变量是啥!!!

总而言之,言而总之,这简单的问题一点都不简单!最主要是我现在造了一个轮子,于是我就给你谈各种你没有这个轮子很困难的场景,就像有了一个药之后,就大谈你好多病,得吃下这颗大力金刚丸一样。

我的解决方案就是在包中实现了和两个函数,像下面这种,它干的事情就是把的x轴值域设为和一样。如果是翻转过坐标轴的,会去设置它的轴。

现在我们再看,对齐了!如果这些子图的数据都是不全的,我们并不是以一个图来设置值域,而是以它们值域的并集来做,这时候,你可以传入参数,这种情况,基本上就相当于你在用和。

和最主要的一点,就是让你用一个图做为参照,方便你让其它图和它对齐。下面通过的例子来讲一下。和进化树拼图,在《用散点可视化一个矩阵》一文是有讲过的,不过那个例子,值域是一样的,假设像上面的例子中有缺失值,还得吃现在造的药丸。下面的例子中,的信息就不全,而且有对不上号的row。

我们可以使用包实现的动词来操作对象,然后就可以把相应的值给加上,用来画图。

画一个柱状图,画热图:

如果我们正常拼,就会像开篇的图一样,是对不上的,这时候我们就拿出,让其它图都和进化树对齐,然后再拼,完美!在拼图的时候,有参照的情况下,和就是这么方便:

你可以把开头的例子改一下,把改成或者试试,和一样是OK的。可以应对前面谈到的1,2,3,4四个点。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191112A05IWX00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券