ggplot2图,从某一点开始的刻度轴

2024-03-18

我如何缩放轴ggplot2从某一点开始。假设我们的范围是 0 到 100,大多数值都在 1 到 10 范围内,其中一个值是 100。

require('data.table')
require('ggplot2')

test <- data.table(x=1:10,y=c(seq(1,9),100))

ggplot(test, aes(x=x,y=y)) + geom_point(size=5)

我想创建一个 y 尺度的图表1 to 10 by 1然后by 10因此图中值 9 和 100 之间的空间变得“更小”。

Update:

eipi10 的方式非常适合我想要实现的目标。我正在努力解决的还有一个细节。我如何摆脱第二个图例并在最终情节中保持正确的比例?

和情节的代码:

test <- data.table(x=1:10,y=c(seq(1,9),100))

p1 = ggplot(test, aes(x=x,y=y,color=x)) + 
  geom_point(size=5) +
  scale_x_continuous(limits=c(0,10)) +
  coord_cartesian(ylim=c(-0.1,10)) +
  scale_y_continuous(breaks=0:10) +
  theme(plot.margin=unit(c(0,0.5,0,0),"lines"))

p2 = ggplot(test, aes(x=x,y=y,color=x)) + 
  geom_point(size=5) + #geom_point(size=5,show.legend=FALSE) +
  scale_x_continuous(limits=c(0,10)) +
  coord_cartesian(ylim=c(40,110)) +
  scale_y_continuous(breaks=c(50,100)) +
  theme(plot.margin=unit(c(0,0.5,-0.5,0), "lines"),
       axis.title.x=element_blank(),
       axis.ticks.x=element_blank(),
       axis.text.x=element_blank(),
       legend.position="none") +
 labs(y="")

gA <- ggplotGrob(p1)
gB <- ggplotGrob(p2)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)
grid.arrange(gB, gA, ncol=1, heights=c(0.15,0.85))

更新2:

An example of the final result. Thanks again to eipi10 and his great support! enter image description here


对数转换将做到这一点:

require('data.table')
require('ggplot2')
library(scales)

test <- data.table(x=1:10,y=c(seq(1,9),100))

ggplot(test, aes(x=x,y=y)) + 
  geom_point(size=5) +
  scale_y_log10(breaks=c(1,3,10,30,100))

UPDATE:没有简单的方法可以用 ggplot2 来制作断轴(因为 ggplot2 不允许您(轻松)做被认为是不好的做法的事情),但这里有一种方法可以得到您正在寻找的东西。 (只是不要告诉哈德利是我告诉你的。)

library(data.table)
library(ggplot2)
library(scales)
library(grid)
library(gridExtra)

test <- data.table(x=1:10,y=c(seq(1,9),100))

总体策略是制作两张单独的图,一张用于 y>=10,一张用于 y

底部图(y

p1 = ggplot(test[test$y<10,], aes(x=x,y=y)) + 
  geom_point(size=5) +
  scale_x_continuous(limits=c(0,10)) +
  coord_cartesian(ylim=c(-0.1,10)) +
  scale_y_continuous(breaks=0:10) +
  theme(plot.margin=unit(c(0,0.5,0,0),"lines"))

顶部图 (y >= 10)。对于这一点,我们去掉了 x 轴标签和刻度线:

p2 = ggplot(test[test$y>=10,], aes(x=x,y=y)) + 
  geom_point(size=5) +
  scale_x_continuous(limits=c(0,10)) +
  coord_cartesian(ylim=c(10.0,110)) +
  scale_y_continuous(breaks=c(50,100)) +
  theme(plot.margin=unit(c(0,0.5,-0.5,0), "lines"),
        axis.title.x=element_blank(),
        axis.ticks.x=element_blank(),
        axis.text.x=element_blank()) +
  labs(y="")

将两个图左对齐(基于这个答案 https://stackoverflow.com/a/13295880/496488):

gA <- ggplotGrob(p1)
gB <- ggplotGrob(p2)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)

将两个图排列在一起。这heights参数决定分配给每个图的垂直空间的比例:

grid.arrange(gB, gA, ncol=1, heights=c(0.15,0.85))

更新2:要包含图例,同时还要确保绘图正确右对齐,请执行以下操作:

1)运行更新问题中的代码来创建绘图p1 and p2,其中仅p1有一个传说。

2)使用下面的函数将图例提取为单独的grob(来自这个答案 https://stackoverflow.com/a/12539820/496488).

3)删除图例p1.

4)使用布局图和图例grid.arrange and arrangeGrob.

# Function to extract the legend as a stand-alone grob
g_legend<-function(a.gplot){
  tmp <- ggplot_gtable(ggplot_build(a.gplot))
  leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
  legend <- tmp$grobs[[leg]]
  legend
}

# Extract the legend from p1
leg = g_legend(p1)

# Remove the legend from p1
p1 = p1 + theme(legend.position="none")

# Left justify the two plots
gA <- ggplotGrob(p1)
gB <- ggplotGrob(p2)
maxWidth = grid::unit.pmax(gA$widths[2:5], gB$widths[2:5])
gA$widths[2:5] <- as.list(maxWidth)
gB$widths[2:5] <- as.list(maxWidth)

# Lay out the plots and the legend
grid.arrange(arrangeGrob(gB, gA, ncol=1, heights=c(0.15,0.85)),
             leg, ncol=2, widths=c(0.9,0.1))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ggplot2图,从某一点开始的刻度轴 的相关文章

  • 时间戳半小时窗口内字段的平均值

    我的数据框有列名Timestamp es看起来像 Timestamp es 2015 04 01 09 07 42 31 2015 04 01 09 08 01 29 5 2015 04 01 09 15 03 18 5 2015 04 0
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • R 中的快速 QR 分解

    我有大量矩阵 需要对其执行 QR 分解并存储生成的 Q 矩阵 进行归一化 以便 R 矩阵在其对角线上具有正数 除了使用之外还有其他方法吗qr 功能 这是工作示例 system time Parameters for the matrix t
  • 为什么 dplyr filter() 不能在函数内工作(即使用变量作为列名)?

    使用 dplyr 函数对数据进行过滤 分组和变异的函数 基本管道序列在函数之外工作得很好 这就是我使用真实列名称的地方 将其放入一个函数中 其中列名称是一个变量 并且某些函数可以工作 但有些函数则不能 尤其是 dplyr filter 例如
  • r 中训练和测试数据的最小最大缩放/归一化

    我正在创建一个函数 它将训练集和测试集作为其参数 最小 最大缩放 标准化并返回训练集并使用这些same最小值和最小 最大范围的值 标准化并返回测试集 到目前为止 这是我想出的功能 min max scaling lt function tr
  • ggplot2 geom_密度和geom_histogram在一个图中

    如何制作一个所有条形加起来为 1 的直方图 并在适合的上方添加一个密度层 set seed 1234 df lt data frame sex factor rep c F M each 200 weight round c rnorm 2
  • 相当于 min() 的 rowMeans()

    我在 R 邮件列表上多次看到这个问题 但仍然找不到满意的答案 假设我有一个矩阵m m lt matrix rnorm 10000000 ncol 10 我可以通过以下方式获得每行的平均值 system time rowMeans m use
  • 计算 R 中各列的唯一值

    我正在尝试创建一个新变量 其中包含来自两个不同列的字符串值的唯一计数 所以我有这样的东西 例如 A tibble 4 x 2 names partners
  • 纵向比较 R 中的值...并进行扭转

    我有许多人在多达四个时间段进行的测试结果 这是一个示例 dat lt structure list Participant ID c A A A A B B B B C C C C phase structure c 1L 2L 3L 4L
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • R:使用 tidyverse 将 NA 替换为 df 中的其他变量

    我想使用 tidyverse 替换 df 中的 NA 值 我想要的值应该从其他列中计算出来 input ID X1 X2 X3 A 0 96 NA 0 97 B 1 00 NA 1 01 C 0 98 0 03 NA A 1 00 NA 1
  • 使用 template.docx 从 Shiny App 编织 Word 文档

    我正在尝试使用 template docx 文件从闪亮的应用程序编写一个 Word 文档 我收到以下错误消息 pandoc exe template docx openBinaryFile 不存在 没有这样的文件或目录 以下 3 个文件当前
  • 闭包作为数据合并习惯的解决方案

    我正在尝试解决闭包问题 而且我think我发现了一个案例 他们可能会有所帮助 我有以下几部分需要处理 一组正则表达式 旨在清理状态名称 位于函数中 具有州名称 上述函数创建的标准化形式 和州 ID 代码的 data frame 用于链接两者
  • 如何使用 tidymodels 和工作流集在同一数据集上拟合多个不同的线性模型

    我想评估同一数据集上多个 主要是 线性回归模型的性能 我想也许使用tidymodels包连同workflowsets workflow set 可能会起作用 我按照这个例子here https workflowsets tidymodels
  • 无法更改 RStudio 中的 R 版本

    我的 RStudio V 0 99 491 无法更改 R 版本 我以平常的方式行事Global Options gt R Version 然后它挂起并且不再工作或反应 R 运行良好的初始版本是R 3 1 0 我以前从未遇到过这样的问题 也许
  • 如何修复 R 中 Kaplan Meier 图的风险表计算错误

    以下是一个数据帧 其中 6 个参与者中的每一个都有唯一的 record ID 我想绘制一个生存分析图 其中包含感兴趣事件的复发以及在时间间隔 tstart 到 tstop 内 暴露 药物剂量 数值变量 的时间依赖性协变量 每个参与者的最大
  • 如何将plot中的单变量列表图表转换为ggplot2格式?

    我正在搜索 但仍然找不到一个非常简单的问题的答案 我们如何使用 R 中的 ggplot2 生成一个变量的简单线图 我正在分析时间序列数据 并且想要对图表进行更复杂的操作 我认为如果我使用 ggplot2 代替会更好plot It works
  • 线性判别分析图

    如何将样本 ID 行号 作为标签添加到此 LDA 图中的每个点 library MASS ldaobject lt lda Species data iris plot ldaobject panel function x y points

随机推荐

  • 如何清除powershell中的变量内容

    我昨天刚开始学习powershell powershell 非常新 我创建了很多变量用于测试目的 以下是我关于变量的问题 如何列出我之前创建的所有变量 那么如何清除变量的所有内容呢 如何移除 删除变量 如何列出我之前创建的所有变量 这会获取
  • Golang:如何创建未知(动态)地图长度

    我可以通过创建 静态 地图 type m map int map int map int bool 但 键 的长度是动态的 unknown len m 1 2 3 4 2 0 true or unk len m 1 2 3 4 true 我
  • 在 Android Kotlin 中查找日期之间的天数差异

    所以 我已经在 google 上搜索 其中大多数使用 Java 有一个使用 Kotlin 并且经常使用与我使用的时间格式不同的时间格式 yyyy mm dd HH mm ss 所以我尝试编码并卡住了 所以 这是代码 import java
  • Spark中使用Map替换列值

    我必须将列列表映射到 Spark 数据集中的另一列 想像这样 val translationMap Map Column Column Map lit foo gt lit bar lit baz gt lit bab 我有一个像这样的数据
  • 如何在R中将时差转换为分钟?

    我有以下程序 timeStart lt Sys time timeEnd lt Sys time difference lt timeEnd timeStart anyVector lt c difference 最后我需要将该数据放入向量
  • 类方法作为 scipy.optimize.curve_fit 的模型函数

    说明书上有这样一句话curve fit that 模型函数 f x 它必须将自变量作为第一个参数 并将参数作为单独的剩余参数进行拟合 但是 我想使用该类的方法作为模型函数 其定义为 def model fun self x par 因此 如
  • 在 WPF 中重复背景画笔

    谢谢你 这个问题与这里这个古老的 未解答的问题非常相似 如何将类似笔记本的线条绘制为 TextBox 背景 https stackoverflow com questions 4041642 wpf how to paint noteboo
  • 带有参数列表的简洁查询

    我正在尝试使用 Dapper 运行带有一组已知参数的查询 但带有这些参数的值列表 我想做的一个简单的例子是 DateTime endDate DateTime Now DateTime startDate endDate AddHours
  • 为什么处理多个异常需要元组而不是列表?

    考虑以下示例 def main list error type try if error type runtime raise RuntimeError list error if error type valueerror raise V
  • 如何在slickgrid中进行多列分组?

    我是 slickgrid 的新手 我已经浏览了一些 slickgrid 的例子 并且基础知识很好 我有一个场景 我需要基于多列进行分组 但 slickgrid 分组是基于单列 如何在 slickgrid 中完成多列分组 并在每个组上具有展开
  • Javafx 中的动态条形图

    您好 我正在尝试创建显示字段值的条形图 字段值通过排序算法更改 图表应显示任何更改 public class FXMLDocumentController implements Initializable static int pole n
  • 在 Android 设计库中使用 TabLayout 的带有图标的选项卡

    我正在尝试使用 android 设计库中的新 TabLayout 来创建仅包含图标的应用程序栏 like this 我该如何使用新的 TabLayout Android 设计库来做到这一点 有没有一个简单的解决方案 或者我只能使用 setC
  • 使用JuMP时如何转换变量的类型

    我正在使用 Julia JuMP 来实现算法 在一部分中 我定义了一个具有连续变量的模型并求解线性模型 我做了一些其他计算 在此基础上向模型添加了一些约束 然后我想用整数变量来解决相同的问题 我无法使用convert 函数 因为它不带变量
  • Chrome 开发工具和 Genymotion Android 模拟器

    参考 Genymotion 如何使用 Chrome 开发工具进行调试 https stackoverflow com questions 21627328 genymotion how to debug with chrome dev to
  • iOS 7 UITextView:重新打开应用程序后 nstextattachment 的大小变为 2 倍

    我正在使用 ios7 中的文本工具包构建一个笔记编辑器 早些时候 我在渲染自定义大小的 NSTextAttachment 时遇到了麻烦 因为它在很大程度上减慢了渲染速度 我通过缩放图像然后将它们添加到 textview 解决了这个问题 您可
  • 如何在 javascript 中使用 scriptlet

    有人可以测试这个例子并分享结果吗 http timothypowell net blog p 23 http timothypowell net blog p 23当我做 var myVar alert myVar I get 从 给出语法
  • Emacs:左侧边缘的 TODO 指示器有一个奇怪的副作用 - 删除字符

    我刚刚读过Emacs 左侧的 TODO 指示器 https stackoverflow com questions 2242572 emacs todo indicator at left side 并尝试了一下 看起来很有趣 小指示三角形
  • 如何获取允许用户访问的存储库的完整列表?

    我发现 bitbucket api 如下 https bitbucket org api 2 0 repositories teamname 但此链接返回 301 状态 已永久移至 api 2 0 repositories teamname
  • 从字符串到整数的映射 - 各种方法的性能

    假设我需要从以下位置进行映射String为一个整数 整数是唯一的 并且形成从0开始的连续范围 即 Hello gt 0 World gt 1 Foo gt 2 Bar gt 3 Spam gt 4 Eggs gt 5 etc 至少有两种简单
  • ggplot2图,从某一点开始的刻度轴

    我如何缩放轴ggplot2从某一点开始 假设我们的范围是 0 到 100 大多数值都在 1 到 10 范围内 其中一个值是 100 require data table require ggplot2 test lt data table