更改 ggplot 中的线宽,而不是大小

2023-12-20

我看到几篇关于改变线宽 https://stackoverflow.com/questions/14794599/how-to-change-line-width-in-ggplot在 ggplot 中。这些答案虽然对OP来说内容丰富且有效,但改变了路线size。也就是说,ggplot 似乎将线视为一系列单元,而 size 增加了每个单元的长度和宽度,使其他调整变得更粗糙。

我希望有一种方法可以使线条更宽(更粗),同时又不会影响长度,进而影响破折号的比例。

我借用了一些代码https://cran.r-project.org/web/packages/ggplot2/vignettes/ggplot2-specs.html https://cran.r-project.org/web/packages/ggplot2/vignettes/ggplot2-specs.html来说明我的意思:

library(ggplot2)

#A simple plot with manually set dashes.
#The first numeral is units of dash length, the second units in the gap in hexadecimal. 
lty <- c("11", "18", "1f", "81", "88", "8f", "f1", "f8", "ff")
linetypes <- data.frame(y = seq_along(lty), lty = lty) 

ggplot(linetypes, aes(0, y)) + 
  geom_segment(aes(xend = 5, yend = y, linetype = lty)) + 
  scale_linetype_identity() + 
  geom_text(aes(label = lty), hjust = 0, nudge_y = 0.2) +
  scale_x_continuous(NULL, breaks = NULL) + 
  scale_y_reverse(NULL, breaks = NULL)
#Altering the size changes the line width AND dash spacing.

ggplot(linetypes, aes(0, y)) + 
  geom_segment(aes(xend = 5, yend = y, linetype = lty), 
     size = 3) + 
  scale_linetype_identity() + 
  geom_text(aes(label = lty), hjust = 0, nudge_y = 0.3) +
  scale_x_continuous(NULL, breaks = NULL) + 
  scale_y_reverse(NULL, breaks = NULL)

本质上我想要的是带有相对细且微调间隙的粗线。我认为这是以另一种方式提出的同一问题:是否有一种方法可以使所有“虚线”的线条宽度变化,但破折号的相对位置不变?像这样(我完全伪造的):


来自?par“线型规范”的帮助文件(加粗以示强调):

线型可以通过给一个小的索引来指定 内置线型表(1 = 实线,2 = 虚线等,请参阅lty上)或直接作为线路开/关延伸的长度。 这是通过偶数(最多八个)的字符串来完成的 字符,即non-zero(十六进制)数字给出 字符串中连续位置的长度。例如, 细绳"33"指定三个单位打开,后跟三个单位关闭,"3313"指定三个单位打开,然后三个单位关闭,然后指定 一开,最后三关。这里的“单位”是(在大多数设备上) 正比于lwd, 与lwd = 1以像素或点为单位或 1/96 英寸。

这表明,如果我们指定适当变化的线型和线宽(例如,较粗的线的宽度是较细的线的两倍,开关延伸的长度是一半),我们可以在不同的条件下实现看似相同的虚线长度的预期效果。线宽。

Note:线型规范中允许的字符是c(1:9, "A":"F")),这意味着最短的拉伸长度为 1 个单位,最长的拉伸长度为 15 个单位。这限制了可以创建的不同线路的数量。

它与基本 R 绘图函数一起按预期工作:

plot.new()
plot.window(xlim=c(0, 5), ylim=c(1, 3))
abline(h = 3, lty = "22", lwd = 8)
abline(h = 2, lty = "44", lwd = 4)
abline(h = 1, lty = "88", lwd = 2)
axis(2, at = 3:1, labels=c("22", "44", "88"), tick = FALSE, las = 1)

另一方面,对于 ggplot2,据我所知,图形文件设备的选择很重要。破折号整齐地对齐vector基于设备,但不一定用于bitmap基于的:

p <- ggplot(data.frame(y = seq(1, 3),
                       lty = c("11", "22", "44"),
                       lwd = c(8, 4, 2)), 
            aes(0, y)) + 
  geom_segment(aes(xend = 5, yend = y, 
                   linetype = lty,
                   lwd = lwd)) + 
  geom_text(aes(label = lty), hjust = 0, nudge_x = -0.3) +

  scale_linetype_identity() + 
  scale_size_identity() +
  scale_x_continuous(NULL, breaks = NULL) + 
  scale_y_reverse(NULL, breaks = NULL, expand = c(0.5, 0))

# bitmap devices
ggsave("test.bmp", p + ggtitle(".bmp"))
ggsave("test.jpg", p + ggtitle(".jpg"))
ggsave("test.png", p + ggtitle(".png"))
ggsave("test.tiff", p + ggtitle(".tiff"))
ggsave("test.wmf", p + ggtitle(".wmf"))

# vector devices
ggsave("test.eps", p + ggtitle(".eps"))
ggsave("test.pdf", p + ggtitle(".pdf"))
ggsave("test.svg", p + ggtitle(".svg"))

我还没有找到任何可以直接在 ggplot2 中解决这个问题的东西。不过,如果您需要其中一种位图格式,但最优先考虑的是相同间距的破折号,则可以首先将绘图输出到一种基于矢量的设备,然后从一种文件格式转换为另一种文件格式。

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

更改 ggplot 中的线宽,而不是大小 的相关文章

  • r:按多列分组并计数

    我有以下数据框 df LeftOrRight SpeedCategory NumThruLanes R 25to45 3 L 45to62 2 R Gt62 1 我想按速度类别对其进行分组 并循环遍历其他列以获取每个速度类别中每个唯一代码的
  • dplyr:带引号变量名的 mutate 的标准评估

    我将如何使用mutate 我的假设是我正在寻找标准评价就我而言 因此mutate 但我对此并不完全有信心 当使用接受变量名列表的函数时 如下所示 createSum function data variableNames data gt m
  • 如何使用 ggplot2 对曲线下的区域进行着色

    我一直在尝试使用 ggplot2 生成类似于此 R 图形的绘图 xv lt seq 0 4 0 01 yv lt dnorm xv 2 0 5 plot xv yv type l polygon c xv xv lt 1 5 1 5 c y
  • 使用 2 个向量参数翻转函数

    我想对需要 2 个向量参数的函数应用滚动 这是使用 data table 的示例 不起作用 library data table df lt as data table cbind data frame x 1 100 y 101 200
  • 从受密码保护的站点读取信息

    我一直在 R 教程中使用 readLines 从网站上抓取信息 我现在希望从我自己的网站提取数据 特别是 awstats 数据 但是该域受密码保护 有没有一种方法可以通过用户名和密码传递我需要的特定 awstats 数据的 url url
  • 如何在R中将英尺转换为厘米?

    我得到了一个高度的字符向量 如下所示 859 5 10 5 8 5 11 6 0 5 10 6 2 5 11 6 2 6 2 5 7 5 9 5 7 6 1 6 0 5 11 6 0 6 5 6 1 6 1 5 10 5 11 5 11 6
  • R - 通过合并和超过 2 个后缀进行减少(或者:如何合并多个数据帧并跟踪列)

    我正在尝试基于 2 列合并 4 个数据帧 但要跟踪列源自哪个数据帧 我在跟踪列时遇到问题 参见 dput dfs 帖子末尾 df example df1 Name Color Freq banana yellow 3 apple red 1
  • R正则表达式获取第二个下划线之前的所有文本

    s lt 1 343 43Hello 2 323 14 fdh 99H 在 R 中 我想使用正则表达式来获取第二个下划线之前的子字符串 如何使用一个正则表达式来完成此操作 另一种方法是用 分割 然后粘贴前两个 一些东西 paste sapp
  • R 中的点图每行有多个值

    我有以下 R 输入文件 car 1 car 2 car 3 car2 1 car2 2 car2 3 然后 我使用以下命令来绘制图表 autos data 点图 autos data V2 autos data V1 但这将每个汽车和 ca
  • 使用faceting()时如何连接geom_point()和geom_line?

    我有一个问题 但我在互联网上没有找到任何相关信息 我很高兴得到一些提示 我有一个数据集 其中 x 轴是离散的 但我想将这些点相互连接 我可以做到 我的问题是当我添加分面选项时 我无法再将这些点相互链接起来 我找到了一个替代方案 但看起来不太
  • 如何通过组度量的平均值在 df 内排列 dplyr:: 组?

    借鉴吴卡拉的设计https stackoverflow com a 26555424 9350837 https stackoverflow com a 26555424 9350837答案 我希望根据各个组汇总测量的平均值对分组 df 进
  • R,igraph,是否可以用图案填充顶点

    使用 R 和 igraph 绘制图形 我使用颜色来标记顶点类型 请参阅下面的代码 是否可以用图案而不是颜色填充顶点 以便在以彩色和黑白查看时可以区分节点类型 我需要 4 种独特的颜色 图案 colorbrewer 中唯一适合的调色板是这个
  • 使用 R Markdown 文档作为函数源

    我正在研究 R Markdown 来记录我经常使用的功能 我会将它们放入 R Markdown 文件中以记录它们 然后如果我几个月后回来查看它 就能够阅读我在函数背后的想法 我的问题是 如果我开始一个新的 R 项目 是否可以获取 r mar
  • 如何创建 highcharter 事件函数以在 Shiny R 中创建“下拉函数”

    我正在建造一个shiny应用程序 我想要完成的事情之一是创建一个下拉菜单 我想将劳动力变量绘制为不同级别的年份变量的函数 请参阅下面的示例数据框 year level 2 level 3 labour 1 2013 10 101 1 2 2
  • 连接树状图和热图

    我有一个heatmap 一组样本的基因表达 set seed 10 mat lt matrix rnorm 24 10 mean 1 sd 2 nrow 24 ncol 10 dimnames list paste g 1 24 sep p
  • R 获取子字符串和正则表达式?

    我有一组文件名字符串 我想提取 符号之后但文件扩展名之前的所有字符 例如 文件名之一是 HelloWorld you txt 我想返回字符串you 这是我的代码 hashPos grep name fixed TRUE dotPos len
  • R中具有特定条件的多列变异

    我有这个数据 M1 M2 M3 UCL 1 2 3 1 5 我想在这种情况下创建新列 如果M1大于UCL MM1将为 UP 否则为 NULL 如果M2大于UCL MM2将为 UP 否则为 NULL 如果M3大于UCL MM3将为 UP 否则
  • 如果值大于或小于,则替换数据框中的值

    我在 R 中操作数据帧时遇到问题 这是 R 中的基本内容 但我找不到执行此类操作的最佳命令 虚拟示例 Var1 20 300 39 Var2 49 23 91 Var3 0 239 210 我怎样才能用10如果值小于 则在第 2 列中10
  • Matlab 中是否有相当于 R 的 dput() 的函数?

    Matlab 中是否有相当于 R 的 dput 的函数 dput 将 R 对象的 ASCII 文本表示形式写入文件或连接 UPDATE 1 添加了递归和对单元格的支持 UPDATE 2 添加了对结构的支持 UPDATE 3 增加了对逻辑 整
  • 在 R 中读入原始二进制数据并将其转换为整数

    我有一个二进制文件 其中包含编码为不同长度 主要是 2 4 字节 的有符号或无符号整数的数值 为了处理这些数据 我将文件的所需部分读取为raw向量与readBin 然后尝试将其转换为十进制 问题是 R的内置函数有限制 我不太明白 比如没有l

随机推荐

  • 解决“类型参数 T 隐藏类型 T”警告

    我在 eclipse 最新版本 中收到以下代码的警告 public interface A
  • 指定的参数超出了有效值的范围参数名称:站点[重复]

    这个问题在这里已经有答案了 我正在使用 Visual Studio 2015 和 Windows 10 hp 笔记本电脑 创建 asp net mvc 应用程序后 构建并运行它 我收到此错误 指定的参数超出了有效值的范围参数名称 site描
  • 捕获一般异常

    根据这篇 MSDN 文章 http msdn microsoft com en us library ms182137 28v vs 80 29 aspx 您不应该捕获一般异常 我确信有一个 stackoverflow 问题可以解决这个问题
  • 从sql导出到excel

    我使用 sqlplus 命令行界面运行查询 该查询将获取大约 3000 万条记录 我需要将结果导出为 csv 或 xls 格式 谁能告诉我这是否可能 任何帮助深表感谢 提前致谢 Try spool myresults csv在 select
  • 无法使用 ContentResolver.openInputStream(Uri) 读取文件

    对于手机内存中存在的文件 路径为 system data recf pic jpg 使用openInputStream 方法构造inputStream会抛出FileNotFoundException 这就是我正在做的事情 ContentRe
  • 如何急切加载与 current_user 的关联?

    我在 Rails 应用程序中使用 Devise 进行身份验证 我想在我的一些控制器中加载一些与用户相关的模型 像这样的东西 class TeamsController lt ApplicationController def show te
  • 无法在 Firefox 中打开 Blob 文件

    我想在 Firefox 上打开从服务器发送的文件 实际上它是在 IE 上运行的 以下是我将如何进行 openFile path fileName this creditPoliciesService openFile path toProm
  • Rails 新建与创建

    为什么需要在 RESTful 控制器中定义一个新方法 并在其后面添加一个 create 方法 谷歌搜索没有为我提供我正在寻找的答案 我理解其中的区别 但需要知道为什么要这样使用它们 Rails 的 REST 实现new and create
  • 将多个域名映射到 Rails 应用程序中的不同资源

    我的 Rails 应用程序允许用户管理度假屋 每个属性都有自己的属性 我的应用程序中的 网站 主页 用户可以调整内容 效果很好 到目前为止很高兴 典型的 Rails 资源方法 因此特定属性的 URL 类似于特定属性的 主页 localhos
  • 具体来说,编译器会做什么来积极优化生成的字节码?

    我一直在阅读各种编译器的功能 并且遇到了许多编译器报告执行的术语 积极优化 例如 LLVM 引用了以下编译时优化功能 内存 指针特定 循环变换 数据流 算术 消除死代码 Inlining 这具体是什么意思呢 假设您有以下代码片段 如何优化生
  • Indexeddb:使用通配符搜索

    我想知道是否可以使用通配符对 indexeddb 对象存储执行搜索 例如 查找键以 555 开头的所有对象会很方便 使用复合键或键片段可以开箱即用地实现这一点 键在 IndexedDB 中的工作方式是生成一个 keyRange 对象并将其传
  • 当任何线程完成任务时终止多个线程

    我对 python 和线程都很陌生 我编写了 python 代码 它充当网络爬虫并在网站中搜索特定关键字 我的问题是 如何使用线程同时运行类的三个不同实例 当其中一个实例找到关键字时 所有三个实例都必须关闭并停止抓取网络 这是一些代码 cl
  • 为什么我的 Visual Studio Win32 项目需要安装 .NET 3.5 SP1?

    使用 Visual Studio 2008 我创建了一个 C Win32 http en wikipedia org wiki Windows API项目 为了发布该程序 我在同一解决方案中创建了一个 Visual Studio 安装项目
  • 删除 FASTA 文件中的换行符

    我有一个 fasta 文件 其中序列用换行符分隔 我想删除换行符 这是我的文件的示例 gt accession1 ATGGCCCATG GGATCCTAGC gt accession2 GATATCCATG AAACGGCTTA 我想把它转
  • PHP - 访客在线计数器

    我有以下代码来统计我的 PHP 网站上的访问者数量 它在使用 WampServer 的本地开发计算机上运行良好 但当我将文件上传到我的托管帐户进行测试时 我意识到它无法正常工作 我得到的数字非常高 并且还注意到会话永远不会被删除 因此它们只
  • Asp.net MVC Razor 页面上有多个表单

    Yo 我的网站上有一个注册页面 页面顶部是现有用户的登录表单 主区域有登记表 登录区域是部分视图 model ViewModels LoginViewModel注册区域也是部分的 model ViewModels RegViewModel
  • StreamProvider 与 RiverPod 无法正常工作(尝试从 Provider 迁移)

    我试图通过将简单的 FireStore auth Provider 示例迁移到 RiverPod 来了解 RiverPod 这是我的身份验证服务 import package firebase auth firebase auth dart
  • JSONP 长轮询始终加载

    我正在使用 JSONP 进行长轮询 而 Firefox 不断弹出 正在加载 微调器 使页面看起来像是尚未完成加载 有办法抑制这种情况吗 我被告知 Orbited 团队有一些技巧可以抑制这种情况 但浏览 Orbited js 代码我无法弄清楚
  • Pymongo 批量插入不起作用

    我正在按照教程进行操作http api mongodb org python current tutorial html http api mongodb org python current tutorial html用于批量插入 但是
  • 更改 ggplot 中的线宽,而不是大小

    我看到几篇关于改变线宽 https stackoverflow com questions 14794599 how to change line width in ggplot在 ggplot 中 这些答案虽然对OP来说内容丰富且有效 但