如何使用 ggplot2 在 y 轴截距(y 轴)上添加点

2023-12-01

我有一个散点图,其中 y 轴缩放比例在某个点发生变化,以绘制具有某些极值的数据。我试图在 y 轴上添加某种视觉提示,指示缩放在该点发生变化。

这是一个情节的例子

library(scales)
library(ggplot2)

set.seed(104)

ggdata <- data.frame('x' = rep('a',100),
                     'y' = c(runif(90, 0, 20), runif(10, 90, 100)))

transformation <- trans_new(
  "my_transformation", 
  transform = function(x) ifelse(x <= 30, x / 5, (x - 30) / 20 + 30 / 5),
  inverse = function(x) ifelse(x <= 30 / 5, x * 5, (x - 30 / 5) * 20 + 30)
)

ggplot(data = ggdata) + 
  geom_jitter(aes(x = x, y = y)) +
  scale_y_continuous(trans = transformation, breaks = c(0, 10, 20, 30, 50, 70, 90, 110))  

scatter plot

我想在 y 轴上的“tick 30”上添加一些标记以进行比例更改。

我正在考虑在轴上添加双勾,但是没有linetype看起来像一条双线。产品应该看起来像this。我知道像这样的转变scale_y_log10,但我宁愿使用随数据动态变化的自定义缩放。

编辑:根据@Tjebo的建议,我使用了annotate向 y 轴断点添加“=”:

library(scales)
library(ggplot2)

set.seed(104)

ggdata <- data.frame('x' = rep('a',100),
                     'y' = c(runif(90, 0, 20), runif(10, 90, 100)))

transformation <- trans_new(
  "my_transformation", 
  transform = function(x) ifelse(x <= 30, x / 5, (x - 30) / 20 + 30 / 5),
  inverse = function(x) ifelse(x <= 30 / 5, x * 5, (x - 30 / 5) * 20 + 30)
)

mybreaks <- c(0, 10, 20, 30, 50, 70, 90, 110)
tick_linetype <- rep("solid", length(mybreaks))
tick_linetype[4] <- "blank"

ggplot(data = ggdata) + 
  geom_jitter(aes(x = x, y = y)) +
  annotate(geom = "point", shape = "=", x = -Inf, y = 30, size = 3) +
  scale_y_continuous(trans = transformation, breaks = mybreaks) +
  theme(axis.ticks.y = element_line(linetype = tick_linetype)) + 
  coord_cartesian(clip = 'off')

solution


我正在考虑在轴上添加双勾,但是没有 看起来像双线的线型。

您可以使用任何字符作为点形状。还有等号、反斜杠等。

例如:

library(scales)
library(ggplot2)

set.seed(104)

ggdata <- data.frame('x' = rep('a',100),
                     'y' = c(runif(90, 0, 20), runif(10, 90, 100)))

transformation <- trans_new(
  "my_transformation", 
  transform = function(x) ifelse(x <= 30, x / 5, (x - 30) / 20 + 30 / 5),
  inverse = function(x) ifelse(x <= 30 / 5, x * 5, (x - 30 / 5) * 20 + 30)
)

ggplot(data = ggdata) + 
  geom_jitter(aes(x = x, y = y)) +
  annotate(geom = "point", shape = "=", x = -Inf, y = 30, size = 8, color = 'red') +
  scale_y_continuous(trans = transformation, breaks = c(0, 10, 20, 30, 50, 70, 90, 110))+
  coord_cartesian(clip = 'off')

我删除了剪辑,但您也可以保留它。选择颜色只是为了突出显示。

或者,更好的是,使用文本注释。然后你还可以改变角度——这很好。

ggplot(data = ggdata) +
  geom_jitter(aes(x = x, y = y)) +
  annotate(geom = "text", label = "=", x = -Inf, y = 30, size = 8, color = "red", angle = 45) +
  scale_y_continuous(trans = transformation, breaks = c(0, 10, 20, 30, 50, 70, 90, 110)) +
  coord_cartesian(clip = "off")

Created on 2020-04-21 by the reprex package (v0.3.0)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 ggplot2 在 y 轴截距(y 轴)上添加点 的相关文章

随机推荐

  • git checkout [commit-name] 与带点的比较

    有什么区别git checkout commit name and git checkout commit name 我看到第一个命令更改为分离的头状态 您可以从那里提交并继续创建一个新分支 我对第二个命令的作用感到困惑 它保留在主服务器上
  • 如何使用Fast Member将数据批量复制到列名不一致的表中?

    我有一个Person具有以下列名的表 身份证号 姓名 出生日期 我也有一个 poco 作为 public class Person public int Id get set public string Name get set publi
  • 画布宽度值不正确

    所以我认为代码
  • 检测页面上的任何内容是否正在动画化

    我知道关于 animated选择器 但目前正在遇到 可能是少数几个 旧版 IE 的性能问题 见图 我觉得这可能是我正在测试的方式ANY页面动画 目前我正在循环一个间隔 核心测试是 is animated This 这就是我担心的 但由于我不
  • 提交表单数据而不重新加载页面

    我尝试提交表单而不使用 jQuery 重新加载页面本身 但是数据没有显示 并且表单正在重新加载 这是不需要的 jQuery 代码 function submitFormData var firstval first val var seco
  • 如何转置 dask 数据框(将列转换为行)以实现整洁的数据原则

    TLDR 我从 dask bag 创建了一个 dask 数据框 dask 数据框将每个观察 事件 视为一列 因此 我没有为每个事件提供几行数据 而是为每个事件提供一列 目标是将列转置为行 就像 pandas 使用 df T 转置数据帧一样
  • SQL 连接和连接行

    我在两个表之间有多对多关系 Table God Restaurants包含我的餐馆 Table God RestaurantKat包含不同的类别 Table God RestKatReference包含两列 每列保存两个表的 id 以下语句
  • 使用 .htaccess 基于日期和名称的友好 URL

    我计划将我的博客从 wordpress com 上切换到在我自己的服务器上托管的我自己的网站上 当然 我想保留 WordPress 的链接结构 这样 WWW 上指向我博客的链接就不会中断 所以我的问题是 如何获得以下友好的 URL http
  • 如何在 MATLAB 中更改条形颜色

    我是编程新手 所以我正在学习 MATLAB 入门 我想知道如何更改 MATLAB 中条形图的颜色 这是我的脚本 有人可以帮忙吗 x 1 8 for y 20 30 40 50 60 70 80 bar x y if y lt 40 col
  • 使用 XIB 和以编程方式执行视图的优点和缺点

    我想决定是使用 XIB 更好还是完全使用代码设计我的视图 到目前为止 我已经读到 当您在界面生成器上设计视图时 它们是预先构建的 因此即使它们使用更多内存 用户也会感觉一切都更快 人们说使用代码做所有事情都比较困难 但我发现它同样容易 所以
  • 使用 Apache Beam 将插入流式传输到 BigQuery 时如何指定 insertId

    BigQuery 支持流式插入的重复数据删除 如何通过 Apache Beam 使用此功能 https cloud google com bigquery streaming data into bigquery dataconsisten
  • 使用jdom创建xml,如何设置standalone =“no”属性

    当我创建 jdom 文档 Document doc new Document 时 默认情况下我只在 xml 标头中看到版本和编码 如何添加独立属性以获得 在文档到达 JDOM 之前 XMLParser 通常会删除标头 我很确定你的意思是你正
  • Font Awesome 无法使用 vue 正确更新

    我正在尝试使用 font awesome 和 bulma 制作一个可点击的 星 图标 在 Vue 中的常规样式和实体样式 fas 和 far 之间切换 为了实现此目的 我有以下组件
  • 原生 GetUninitializedObject 实际存在于哪里?

    我对一些序列化的东西很好奇 所以我四处探索FormatterServices并找到了一个名为的方法nativeGetUninitializedObject它实际上处理给定类型的初始化 不调用构造函数 该方法装饰有extern关键字和以下属性
  • c 分段错误 fgets

    int main int argc char argv FILE inFilePtr fopen argv 1 r char rawdata malloc sizeof char 100 float ary malloc sizeof fl
  • 两个移动物体与纬度/经度坐标的交点

    尽管我已经阅读了几篇文章 但到目前为止我还无法真正解决这个问题 希望有人可以在这里提供帮助 事实 已知变量 地球表面上的两个移动物体 均具有当前已知的纬度 经度坐标 两个物体的速度也是已知的 以米 秒为单位 一个物体的方向 角度 是已知的
  • HybridAuth / PHP Facebook SDK 身份验证失败(getUser 返回 0)

    我正在尝试配置 HybridAuth 目前还处于早期阶段 现在我想做的就是连接并确保 HA 将重定向到 Facebook 并提示安装应用程序 然后在用户返回时对用户进行身份验证 我正在手动调用以下位置 http mydomain com a
  • 打字机效果 Pygame

    这个问题确实很难问 但我知道 Stack Overflow 的你们都是最聪明的人 我完全不知道为什么会发生这个问题 我对 Python 和 Pygame 相当熟悉 所以任何关于如何改进代码的建议都会带着提高我的技能的热爱而被接受 我正在创建
  • 如何关闭 UI KeyboardType NumberPad?

    我试图隐藏数字键盘 但我不想实现按钮 当用户点击文本字段外部时 有没有办法关闭数字键盘 这是你读到它并说 这很简单 你只是 的问题之一 然后你就去做 让它变得超级复杂 然后意识到事情不必那么复杂 我想出的答案是使用隐形的 我相信它会帮助其他
  • 如何使用 ggplot2 在 y 轴截距(y 轴)上添加点

    我有一个散点图 其中 y 轴缩放比例在某个点发生变化 以绘制具有某些极值的数据 我试图在 y 轴上添加某种视觉提示 指示缩放在该点发生变化 这是一个情节的例子 library scales library ggplot2 set seed