R画图y轴范围太大时，如何局部压缩坐标轴？

RPub 上有一篇文章介绍了一个缩放的函数（https://rpubs.com/huanfaChen/squash_remove_y_axix_ggplot） ，但当中有个小问题。这里小修改了一下。

```library(ggplot2)

shiyanhe <- data.frame(group=rep(c('A', 'B', 'C', 'D'), each = 10),
value=c(rnorm(10), rnorm(10)+100))

ggplot(shiyanhe, aes(x=group, y=value)) + geom_point()
```

```library(scales)

squash_axis <- function(from, to, factor) {
# Args:
#   from: left end of the axis
#   to: right end of the axis
#   factor: the compression factor of the range [from, to]

trans <- function(x) {
# get indices for the relevant regions
isq <- x > from & x < to
ito <- x >= to

# apply transformation
x[isq] <- from + (x[isq] - from)/factor
x[ito] <- from + (to - from)/factor + (x[ito] - to)

return(x)
}

inv <- function(x) {
# get indices for the relevant regions
isq <- x > from & x < from + (to - from)/factor
ito <- x >= from + (to - from)/factor

# apply transformation
x[isq] <- from + (x[isq] - from) * factor
x[ito] <- to + (x[ito] - (from + (to - from)/factor))

return(x)
}

# return the transformation
return(trans_new("squash_axis", trans, inv))
}
```

```ggplot(shiyanhe, aes(x = group, y = value))+
geom_point()+
coord_trans(y = squash_axis(5, 95, 10))
```

```ggplot(shiyanhe,aes(x = group, y = value))+
geom_point()+
coord_trans(y = squash_axis(1, 99, 30))
```

备注

```ggplot(shiyanhe, aes(x = group, y = value))+
geom_point()+
scale_y_continuous(trans = squash_axis(5, 95, 10))
```

```ERROR while rich displaying an object: Error in x[isq] <- from + (x[isq] - from) * factor: NAs are not allowed in subscripted assignments
```

参考

1. https://rpubs.com/huanfaChen/squash_remove_y_axix_ggplot
2. https://stackoverflow.com/questions/61010786/error-nas-are-not-allowed-in-subscripted-assignments-while-using-squash-axis-i

0 条评论

• matplotlib绘图技巧详解(三)

我们之前已经讲述了matplotlib的绘图原理，陆续会更新绘图技巧、相关图形绘制。

• R语言绘图001-基础参数

ann:如果ann=FALSE，那么高水平绘图函数会调用函数plot.default使对坐标轴名称、整体图像名称不做任何注解。默认值为TRUE。

• 数据可视化 | 手撕 Matplotlib 绘图原理（一）

本文内容适合入门及复习阅读，绘图所需的基本知识均有涉及，内容较多，由于篇幅限制，故分成两部分。

• Matplotlib新手上路(上)

matplotlib是python里用于绘图的专用包，功能十分强大。下面介绍一些最基本的用法： 一、最基本的划线 先来一个简单的示例，代码如下，已经加了注释： ...

• 5-3 绘制图形

基本形状的绘制，我们可以从图形类提供的方法中找到解决方案，比如三角形即画三条相互连接的直线，心形则依次画几个半圆形组合，关键问题是找准其中的连接点位置，常见图形...

• R语言系列第六期：③R语言高级绘图（上）

这一节将介绍更多的R图形资源。首先是定制R图形的一些常用方法，主要涉及数据和模型的图形绘制。然后是如何自定义其他类型的图形或点线等元素。

• ggplot2包图形参数(坐标轴、分面、配色)整理

R具有强大的统计计算功能和便捷的数据可视化系统。目前R主要支持四套图形系统：基础图形（base）、网格图形（grid）、lattice图形和ggplot2。其中...

• Matplotlib 系列之「绘制函数图像」

matplotlib 是 python 最著名的绘图库，它提供了一整套和 matlab 相似的命令 API，十分适合交互式进行绘图。

• Android开发笔记（一百五十四）OpenGL的画笔工具GL10

上一篇文章介绍了OpenGL绘制三维图形的流程，其实没有传说中的那么玄乎，只要放平常心把它当作一个普通控件就好了，接下来继续介...

• 不到30行代码实现一个酷炫H5全景

前言：本文将围绕：了解什么是全景 --> 怎么构成全景 --> 全景交互原理来进行讲解，手把手教你从零基础实现一个酷炫的Web全景，并讲解其中的原理。小白也能学...

• Matlab系列之二维图形（上）

上一篇已经对图形的属性有过介绍，在此基础上来进行二维以及后续三维图形的操作（注：没接触过其他维度的操作，就不折腾相关的内容了），将会更容易理解这些属性的用法，当...

• 如何用matlab画稍微美观点的图

本科毕设论文写作过程中，老师指出我用matlab画的图太丑，需要好好改改。于是我这几天参考网上资料，对画图的一些细节进行了设置，得到的图确实比以前好了些。而且我...

• WebGL简易教程(五)：图形变换(模型、视图、投影变换)

通过之前的教程，对WebGL中可编程渲染管线的流程有了一定的认识。但是只有前面的知识还不足以绘制真正的三维场景，可以发现之前我们绘制的点、三角形的坐标都是[-1...

• 盘一盘 Python 系列 7 - PyEcharts (v1.0)

有读者说〖PyEcharts〗一贴里的图美如画，但是版本是 pyecharts v0.5，用现在 v1.0 来运行会出错，建议我再写篇 pyecharts v1...

• 盘一盘 Python - PyEcharts (v1.0)

有读者说〖PyEcharts〗一贴里的图美如画，但是版本是 pyecharts v0.5，用现在 v1.0 来运行会出错，建议我再写篇 pyecharts v1...

• Matlab入门到放弃（三）、matlab基础知识

2、在进行矩阵之间的运算时，假设a，b表示两个矩阵，a*b表示矩阵a与矩阵b进行矩阵相乘，a.*b表示矩阵a中的元素与矩阵b中的元素按位置依次相乘，得到的结果作...

本文实例为大家分享了OpenGL实现彩色光圈效果的具体代码，供大家参考，具体内容如下

• 深度学习基础之matplotlib，一文搞定各个示例

Matplotlib 是 Python 的绘图库。它可与 NumPy 一起使用 ，Matplotlib也是深度学习的常用绘图库，主要是将训练的成果进行图形化，...

• 一起来学matlab-matlab学习笔记8 基本绘图命令_5 初级二维绘图/交互式绘图

本文为matlab自学笔记的一部分，之所以学习matlab是因为其真的是人工智能无论是神经网络还是智能计算中日常使用的，非常重要的软件。也许最近其带来的一...