调整 Mathematica 中现有 Graphics 对象的样式/属性

2024-04-17

Mathematica 的优势之一是其一致的对象底层表示。因此,要更改绘图的属性而不重做用于生成它的计算,我可以做类似的事情

Replace[myplot, {Graphics[x_List, y_List] :> 
 Graphics[x,Flatten[{y, 
  BaseStyle -> {FontFamily -> Helvetica, FontSize -> 20}}]]}]

不幸的是,每次我想使用这种方法来修改绘图以更改线条、点、字体等的样式/颜色时,我都必须通过反复试验找出适当的替换规则,这会否定任何无需重新计算绘制的数据即可提高效率。这是另一个例子:

myplot = Plot[{Cos[x], Sin[x]}, {x, 0, 2 Pi}, 
  PlotStyle -> {{Red, Dashing[None]}, {Green, Dashing[None]}}]

myplot /. { {x___, PatternSequence[Red, Dashing[_]], y___}
              -> {x, Green, Thickness[.02], Dashing[Tiny], y},
            {x___, Green, y___}
              -> {x, Thickness[Large], Red, y} }

这完成了工作(改变线条颜色/虚线/粗细),但看起来有点巫术。

是否有任何文档(指南或教程)——没有深入研究 Graphics 对象和基元的确切规范——可以指导我构建适当的替代品?如果没有,是否有更好的方法来调整绘图的外观无需重新计算(除了将数据保存在变量中并使用 ListPlot 之外)?


我等待您想要的操作的更多示例,但现在我将指出,可能可以在不进行任何替换的情况下进行一类操作。被迫仅仅猜测你想要什么,就会出现一种解释。

myplot = Plot[{Sin[x], Csc[x]}, {x, 1, 10}];

Replace[myplot, {Graphics[x_List, y_List] :> 
   Graphics[x, 
    Flatten[{y, 
      BaseStyle -> {FontFamily -> "Helvetica", FontSize -> 20}}]]}]

Show[myplot, BaseStyle -> {FontFamily -> "Helvetica", FontSize -> 20}]

正如你所看到的,在这种情况下Replace不需要。


解决您更新的问题,有两种不同类别的图形对象Plot output.

  1. 函数的绘制线 (Sin[x], Cos[x])并且它们的样式被“硬编码”到Line对象,其中Graphics可以理解。

  2. 辅助设置如Axes -> True, PlotLabel -> "Sine Cosecant Plot" and AxesStyle -> Orange被理解为Graphics直接直接进行,无需转换,因此保留在myplot object.

第二种设置可以在事后轻松更改,因为它们是软设置。

第一种多以某种方式进行处理。由于不同的事实,这变得复杂*Plot函数输出不同的模式Graphics and Plot它本身可能会根据给定的输入给出不同的输出模式。

我不知道有任何全局方法可以重新设计所有绘图类型,如果您经常进行此类重新设计,那么保留所需的数据并简单地使用 Plot 重新生成图形可能更有意义。然而,对于基本用途,您的方法可以改进。绘制的每个函数都会创建一个Line对象,按给定的顺序。因此,您可以使用类似的方法来完全重新设计绘图:

myplot = Plot[{Cos[x], Sin[x]}, {x, 0, 2 Pi}, 
  PlotStyle -> {{Red, Dashing[None]}, {Green, Dashing[None]}}]

newstyles = Directive @@@
   {{Green, Thickness[.02], Dashing[Tiny]},
    {Thickness[Large], Red}};

i = 1;
MapAt[# /. {__, l : Line[__]} :> {newstyles[[i++]], l} &, myplot, {1, 1}]  

请注意上面最后一行代码中粗斜体部分。这是位置的零件规格Line内的物体myplot,并且可能会改变。通常这会按原样工作,但如果您发现必须经常更改它,则应该可以使用检测其位置的功能(询问是否需要)。


图形检查器

telefunkenvf14 的评论提醒我,我疏忽了没有提及图形检查器。

虽然我个人倾向于避免大量的情节后重新设计,因为我喜欢将所有内容保留在一个地方(Plot命令),我更喜欢对代码进行更改,这样就可以记录我的设置,而不必深入研究Graphics对象,图形检查器直接适用。

  • 双击该图。边框应从橙色变为粗灰色。
  • 单击其中一条情节线。 (当您将鼠标悬停在元素上时,尖头应该会改变)
  • Press Ctrl+g to open the Graphics Inspector.
  • 进行所需的更改,然后关闭图形检查器。

您现在可以复制并粘贴整个图形,或直接将其分配给符号:p = <graphic>

另请参阅:http://www.wolfram.com/broadcast/screencasts/howtoeditmathematicagraphics/ http://www.wolfram.com/broadcast/screencasts/howtoeditmathematicagraphics/

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

调整 Mathematica 中现有 Graphics 对象的样式/属性 的相关文章

  • 简化 Mathematica 中的正则表达式

    我最近发现克莱尼代数 http en wikipedia org wiki Kleene algebra用于操作和简化正则表达式 我想知道这是否已内置到 Mathematica 等任何计算软件程序中 如果有一个计算工具来进行大型表达式的并集
  • 将声音导出为 WAV 文件

    我从来没有在 Mma 中过多地使用声音 I have t Sound List Violin SoundNote 6 我怎样才能导出t作为 WAV 文件 当我尝试显而易见的事情时 Export c test wav t I get 在这个旧
  • Mathematica:未评估、延迟、保留、HoldForm、HoldAllComplete、等等

    我对所有旨在以某种方式阻止评估的内置 Mathematica 函数感到困惑 Unevaluated Defer Hold 以及超过六种形式Hold Mathematica 文档只是单独解释每个函数 而没有解释为什么选择其中一个函数 谁能对所
  • Mathematica“AppendTo”函数问题

    我是 Mathematica 的新手 在向数据表添加列时遇到了重大故障 我在 Vista 中运行 Mathematica 7 我在RFD上花了很多时间才来这里问 我有一个包含三列五行的数据表 mydata 我正在尝试将两个包含五个元素的列表
  • Mathematica 中的语法着色

    用户定义的函数符号如f in f x 2 x 或变量符号 例如lotto in lotto Table 2 10 自动着色 在 M8 上的语法着色中 没有为此提供选项 仅限未分配值的局部变量或全局符号 这并不完全是您所要求的 但可能对您有用
  • 在 Mathematica 中使用多个包和引用构建应用程序包

    我正在 Mathematica 中构建一个应用程序包 应用程序包含多个包并引用其他应用程序包 为了设置一切 我使用并遵循了工作台帮助部分的应用程序包说明 该部分也可以在以下位置找到 http reference wolfram com wo
  • 设计方法:过载与开关?

    关于封装设计的性能和可扩展性 最好是 重载 函数名称 让 Mathematica 根据模式 条件 测试以及系统对定义的排序方式来确定要使用哪个版本 或者使用 Switch 或类似命令 构建单个函数来直接求值 Mathematica 的表达能
  • 在 Mathematica 中导入 Google Sketchup 模型

    Google 的 Sketchup 是一个漂亮 简单的 3D 对象建模器 此外 谷歌还拥有巨大的3D 对象仓库 http sketchup google com 3dwarehouse 因此 如果您在这方面不是特别有天赋 实际上您不必自己做
  • 如何捕获 TimeConstrained 产生的中断?

    数学有CheckAbort允许捕获和处理用户生成的和编程的函数Aborts 但它不允许捕获由以下函数生成的中断TimeConstrained and MemoryConstrained TimeConstrained CheckAbort
  • 解决电力塔

    a 2 Power 10 6 10 9 3 Power 4 9 7 5 TwoTower n Nest 2 1 n 最小的是什么n这样TwoTower n gt a This question http www quora com How
  • Mathematica:为什么 3D 绘图会记住最后的视点/旋转,即使在再次评估后也是如此?

    我觉得这有点烦人 我制作了一个 3D 绘图 最初它以默认方向出现 然后 我使用鼠标以某种方式旋转它 现在我再次运行该命令 期望获得原始形状 即通过鼠标旋转它之前的原始方向 但相反 它只是给了我与屏幕上相同的绘图 即它似乎保留 记住了该输出单
  • 了解跟踪*

    再会 当试图理解数学使用标准的评估顺序Trace and TraceScan最近开发的命令及其漂亮的视觉表示thread https stackoverflow com questions 5459735 the clearest way
  • NIntegrate - 为什么在这种情况下 Mathematica 8 的速度要慢得多?

    我有一个 Mathematica 代码 我必须在数值上评估数千个与此类似的积分 NIntegrate Pi Cos Pi 2 x y 1 y 1 y Sin 2 Pi x 1 y Sin Pi 2 x y 1 y E x 1 y x 0 1
  • Mathematica 的模式匹配优化不佳?

    我最近询问了为什么PatternTest引起了大量不必要的评估 PatternTest 未优化 https stackoverflow com questions 8484299 patterntest not optimized列昂尼德回
  • 使用 select 操作 mathematica 中的列表

    我已将一些数据导入 Mathematica 中 数据将类似于 0 2 2 3 4 3 5 4 8 4 我想丢弃 x 值小于给定值的所有元素 或者创建一个包含 x 值大于该值的数据的新列表 我假设Select应该做这项工作 但我不知道怎么做
  • 为什么使用牛顿法的 FindMaximum 会抱怨找不到足够的函数减少?

    首先 这看起来 来自 ContourPlot 是一个相当简单的最大化问题 为什么使用牛顿法的 FindMaximum 会出现问题 其次 如何摆脱警告 第三 如果我无法摆脱这些警告 我如何判断警告是否有意义 即最大化失败 例如 在下面的代码中
  • Mathematica 作业中不需要的评估:为什么会发生这种情况以及如何在包加载过程中对其进行调试?

    我正在开发一个 大 包 它不再正确加载 这是在我更改一行代码后发生的 当我尝试加载包 需要 时 包开始加载 然后 setdelayed 定义之一 活跃起来 即以某种方式进行评估 被困在之前加载几行的错误捕获例程中 并且包加载中止 使用 ab
  • 自定义后缀表示法,应用/函数

    我想在 Mathematica 7 中设置以下自定义符号 这种表示法本身并不是特别有用 因此请不要建议现有的替代方案 或指出这只会节省一些击键次数 我想知道是否可以以及如何完成 目前 可以进入 f 2 2 3 f a b c Out b a
  • 在 Mathematica 中创建可变长度的空格字符串

    以下 Mathematica 函数 f 创建长度为 n 的空白字符串 f n Fold StringJoin Array n 必须有无数种替代方案来创建此功能 你会怎么做呢 f n StringJoin ConstantArray n Ed
  • Mathematica 中 PatternTest 的意外行为

    我正在研究玩具问题 以帮助我吸收 Mathematica 中模式匹配的思想 下面的代码没有按照我的预期运行 我无法弄清楚我对 PatternTest 的理解有什么问题 MatchQ 2 1 2 5 x FromDigits gt 3 y 我

随机推荐

  • VSTO 加载项中的 SetProcessDPIAware

    网上有很多关于通过调用为 Winforms 应用程序设置 DPI 感知的帖子SetProcessDPIAware 或者通过对应用程序的清单进行一些相关更改 例如 如何配置应用程序以在具有高 DPI 设置 例如 150 的计算机上正确运行 h
  • 移动应用程序在后台时的 GPS 位置(使用 ionicframework)

    我需要实现一个应用程序来存储用户从 A 移动到 B 时的旅程 路径 现在 我知道 ionicframework 可以使用 GPS 但是当我的应用程序转到后台时会发生什么 我的应用程序如何继续存储用户位置 这可能吗 有没有我可以使用的插件 请
  • 图表网格线样式

    我正在使用 Visual Studio 2010 中的标准图表库 该图表工作正常 但我无法更改轴网格线样式 这些是已在 Form1 Designers cs 中设置的属性 chartArea3 Name ChartArea1 this ch
  • 当我们尝试将字符打印为浮点数和十六进制时,为什么 printf 的行为不同?

    我尝试在 printf 中将字符打印为浮点数并得到输出 0 这是为什么 还 char c z printf f X c c 给出了一些奇怪的十六进制输出 而当我这样做时输出是正确的 printf X c 为什么会这样呢 The printf
  • 如何在 Microsoft Surface 应用程序中显示 PDF 文档?

    我想在我的 Microsoft Surface 应用程序中显示 PDF 文档 我做了一些搜索 发现了很多可能性 但如果在 Microsoft Surface 中使用 所有这些似乎都有一些缺点 这个有趣的 http www screencas
  • 有类似“Firebug for IE”(用于调试 JavaScript)之类的东西吗?

    我正在尝试修复一些 JavaScript 错误 在 Firefox 中工作时 Firebug 使调试这些问题变得更加容易 但是当代码在 Firefox 上运行正常但 IE 却抱怨时 你该怎么办 您还可以查看IE 开发者工具栏 http ww
  • 使用 GOOGLE MAP API 的简单 Android 程序

    尝试使用 Google 地图 这是我使用 google Map API 的第一个程序 由于日志错误 我无法执行 我需要纠正自己的地方 MainActivity java public class MainActivity extends A
  • 如何将 {1,0} 与正则表达式匹配

    or 0 1 will match必要时采取一些模式 但现在我想反过来做 Say 不匹配如果需要的话 解决办法是什么 后面加个问号就可以了 0 1 as in 0 1 并且它会更喜欢匹配零次而不是一次 问号使它 不贪婪 这意味着它不会尽可能
  • UIButton 在 iOS 5.x 中不起作用,在 iOS 6.x 中一切正常

    通过点击主 UIView 上的简单 UIButton 附加视图 子视图 会出现在屏幕中央 以编程方式创建的子视图 在该子视图上 我有 UIButton 启动 MPMoviePlayer 此代码位于创建子视图的方法内部 Create play
  • Hibernate注解@Where带参数

    我目前有此类产品 以这种方式注释 我正在使用软删除 SQLDelete sql UPDATE products SET active 0 WHERE id product and last modification date Where c
  • IE(11)CSS多列处理不当?

    我正在使用 CSS 多列构建 2 列布局 并且我想给出有关在何处断开列的提示 所以我说 columns 2在容器上 以及break before column在我想要休息的地方 IE 在我的例子中是 11 决定将我的内容分成 3 列并溢出到
  • 使用条件对向量进行子集化(不包括 NA)

    vector1 c 1 2 3 NA condition1 vector1 2 vector1 condition1 vector1 condition1 TRUE 在上面的代码中 条件1是 FALSE TRUE FALSE NA 第三行和
  • 在执行器服务中实现线程超时

    所以现在我有一个相当基本的执行器服务 我用它来将程序分解为线程 如下所示 ExecutorService threadPool Executors newFixedThreadPool 12 for int i 0 i lt objectA
  • 如何在模块化 Android 应用程序中共享依赖项

    我有一个以模块化方式架构的 Android 项目 我通过将项目的源代码划分到多个 Gradle 模块之间来模块化项目 遵循干净的架构 https antonioleiva com clean architecture android 这是应
  • GDB可以杀死一个特定的线程吗?

    我正在运行一个应用程序 firefox 我想知道是否可以使用 GDB 附加到进程并杀死特定线程 有没有办法做到这一点 我知道此操作可能会使应用程序崩溃 EDIT 在此调试会话中 ps ax显示firefox pid是1328 gdb App
  • 如何格式化以仅包含小数(如果有)

    如果我只想显示非整数的小数 那么格式化小数的最佳方法是什么 Eg decimal amount 1000M decimal vat 12 50M 格式化后我想要 Amount 1000 not 1000 0000 Vat 12 5 not
  • 如何将 Valve 添加到 Apache Tomcat

    我通过扩展 org apache catalina valves ValveBase 类并实现 inovoke 方法为 Apache Tomcat 编写了一个 Valve 现在我想将它添加到我的Tomcat中执行 请告诉我步骤 使用您的 V
  • 什么是 Kestrel(与 IIS / Express)

    什么是 kestrel Web 服务器以及它与 IIS IIS Express 有何关系 我以前在 IIS Express 上开发应用程序并将它们托管在 IIS Web 服务器上 对于 ASP NET Core 我依赖于Microsoft
  • Django Python loaddata 失败并出现 django.db.utils.IntegrityError

    接手了一个数据库项目 我正在努力将远程数据库加载到本地数据库中 该应用程序是用 django 构建的本地数据库依然依赖sqlite开箱即用 The 远程数据库 is of postgresql type 我尝试在终端中运行的代码 pytho
  • 调整 Mathematica 中现有 Graphics 对象的样式/属性

    Mathematica 的优势之一是其一致的对象底层表示 因此 要更改绘图的属性而不重做用于生成它的计算 我可以做类似的事情 Replace myplot Graphics x List y List gt Graphics x Flatt