调整 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 对象的样式/属性 的相关文章

随机推荐

  • 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