保存绘图注释

10
昨天,我在为"从每个列表中最佳地选择一个元素"问题添加一些定时图时,又想起了我几年前发的一篇数学组帖子("在重新生成绘图后保留绘图注释")。
当我愉快地手动注释我的绘图时,我想加上一些轴标签。问题是,如果在绘图中加入轴标签,重新生成绘图将破坏您的手动注释。
似乎可以在名为pic的绘图中找到用户添加的内容:Rest[pic[[1, 1]]],因此,如果您将绘图重新生成为pic2,则可以使用以下方法获取您的注释:
Insert[pic2, Rest[pic[[1, 1]]], {1, 1}]

我记得David Park(Presentations包的作者)非常反对手动注释。我自己也做了很多程序化标注,但有时候在程序控制下放置标签太困难了,比如这里(请注意,我不太喜欢PlotLegends,特别是因为一些颜色非常接近):

top-answerers

我的补救措施已经太迟了,因为我扔掉了情节原件,但是我想知道这个问题的当前思考状态。

  • 有更好的方法吗?
  • 这种方法有多普遍?它适用于所有情节和图表类型吗?
  • 它适用于所有版本吗?(高于5.2)
  • 任何WRI计划改进处理情节中用户添加的内容吗?

顺便说一句,我的mathgroup帖子中的技巧与上面显示并在前10个情节中使用的技巧略有不同。不过原则是相同的。


编辑

我把制作类似上面那个图的SO数据的代码放在了Mathematica工具包中。

编辑

现在,这段代码已经被移动到了Brett Champion提出的更合适的问题中:如何从Mathematica访问StackOverflow API


3
+100 分数给这个对数图!我几乎相信这个问题只是为了炫耀这个图表而提出的借口... - Simon
@belisarius和@Mark,可能是从[data explorer](http://data.stackexchange.com/)中获取了前10位Mathematica回答者。可惜,我没有回答足够的问题来进入那个列表... 唉。 - rcollyer
@rcollyer @belisarius @Mark 没错,我使用stackoverflow API编写了一个mma程序。 - Sjoerd C. de Vries
1
顺便问一下,@Sjoerd,以我的美式英语口音来说,你的名字该怎么发音? - Mr.Wizard
2
@Mr.Wizard 像“insured”中的“sured”部分一样,清晰地发出类似于“yellow”中“y”的音在“u”声之前。希望这样有点清楚。这是一个弗里斯兰名字(荷兰北部的一部分),就像我的姓氏一样。后者是荷兰最常见的姓氏之一(也是我到处拖着中间的字母的原因;在LinkeIn上至少有15个叫Sjoerd de Vries的人;还有一个著名的电视名人彼得 R. 的调查记者的双关语)。 - Sjoerd C. de Vries
显示剩余9条评论
2个回答

5

个人而言,我同意David Park的观点,即编程方式添加注释更为优越。这种方式也很可能更加稳健,并且能够与未来版本的Mathematica兼容。我真的希望看到绘图工具面板有所改进,并且希望手动添加的多个注释在生成的Graphics对象中能够更清晰地显示出来。如果存在类似于AddedAnnotation的惰性Head,那么您可以通过编程方式找到所有这些编辑内容。

Cases[editedPic, _AddedAnnotation, Infinity]

目前,我发现自己需要深入理解这张图片的InputForm,而且我不确定你的Rest[pic[[1, 1]]]在未来版本中是否总是有效。


这与我在mathgroup中提出的类似,但我想将其放置在一个选项中:Graphics[ {原始绘图内容,用户添加内容},PlotRange->Automatic, etc..., UserAdditions-> {图形内容,图形内容} ] - Sjoerd C. de Vries

4

一种方法,虽然有些丑陋但似乎对于小的图形注释来说工作得相当不错,如下所示。

通过使用“绘图工具”添加注释后,附加信息将与图形一起存储,并可以通过选择图形括号并使用“显示表达式”(在Mac上为Shift-Command-E)进行检查。通常可以通过剪切和粘贴或使用“Cases”来提取附加信息,然后可以使用“Epilog”将其添加到新的修改后的图中。

例如

Plot[Sin[x], {x, 0, 6 \[Pi]}]

添加一些注释后,如下所示:

enter image description here

将名称plotgraphic分配给上述图片,可以生成一个新的修改后的图形并添加注释,例如:

Labeled[Plot[Sin[x], {x, 0, 8 \[Pi]}, 
  Epilog -> Rest[Cases[plotgraphic, _List][[1]]]], "Sine Plot"]

提供

在此输入图片描述

这可能很尴尬,至少可以改进方法。它也很可能是其他人已经做过的事情。然而,它确实提供了一个情节,其中注释是“以编程方式”存在的,由于没有人提到Epilog,因此我决定值得发布。


1
您也无需为第一个图形指定名称,而是可以将图像直接复制粘贴到“Cases”命令中。 - Simon
@Simon 谢谢。这个不错。 - 681234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接