【问题标题】:Custom Intervals of Markers in Mathematica PlotMarkersMathematica PlotMarkers 中标记的自定义间隔
【发布时间】:2011-06-14 21:55:48
【问题描述】:

我试图在 Mathematica (ListLinePlot) 的同一个图中绘制多个列表,并使用 PlotMarkers 和 PlotLegend 包来获得最终数字。问题是 Mathematica 为每个点都放置了一个标记,这使得很难判断哪个标记在图中的位置。是否可以每 n 个样本出现一个绘图标记(例如,对于 100 点绘图,每 10 个点)。

目前的指令是 PlotMarkers->{Automatic, Small}。

【问题讨论】:

  • 我不知道用 PlotMarkers 做这件事的方法,你能不能抽取你的数据集,只留下每 10 个点中的 1 个?
  • 请允许我欢迎您来到 StackOverflow,并提醒我们通常在这里做的三件事:1) 当您获得帮助时,请尝试在您的专业领域中回答问题 2) Read the FAQs 3) 当你看到好的问题和答案时,给他们投票using the gray triangles,因为系统的可信度是基于用户通过分享他们的知识而获得的声誉。还记得接受更好地解决您的问题的答案,如果有的话,by pressing the checkmark sign

标签: wolfram-mathematica plot markers


【解决方案1】:

我在评论中描述的例子。标记的行为不正常。

显然我还不能发布图片,但运行以下代码

data = Accumulate /@ RandomReal[{-1/2, 1}, {3, 100}];
ListLinePlot[data, PlotMarkers -> {Automatic, Small}, Mesh -> 5]

应该给出不正确的结果。此外,同一图中的数据和图的数量非常大,可以单独选择哪些点,我想为不同的图和数据范围保留相同的指令,因为它们在每种情况下往往在 100 到 300 之间变化,我有将它们保存在不同的表中,因为它们在此过程中用于其他计算。

情节由belisarius发布,运行上面的代码

【讨论】:

  • 您的代码结果对我来说似乎是正确的。或者我真的误解了你想要达到的目标,或者你应该关闭 Mma 并开始一个新的副本并重试。顺便说一句,为了检查,我将编辑你的答案并添加结果图,这样你就可以评论出了什么问题..
  • @belisarius:o4tlulz 是对的。查看绘图中红色和棕褐色线中的蓝色圆圈。对于Mesh -> i 的各种值,情况甚至更糟。使用显式PlotMarkers 也无法解决此问题。 GridPlotMarkers 选项似乎不能很好地结合在一起......
  • @o4tlulz:我认为您在上面“答案”的最后一段中指的是我的答案。只要您以编程方式解决问题,那么您就可以选择点(例如基于 x 值)并在所有绘图中一致地放置绘图标记。
  • @Simon,@o4tlulz 现在需要睡觉了。请在问题解决后删除此答案,因为这不是一个真正的答案(虽然我理解为什么发布它,但它应该是对原始问题的正式评论或编辑)。 Tnx
  • @belisarius。我发布作为答案是因为我认为它会接受我无法在评论中发布的图像。仍然在您编辑的图片中,标记的行为不符合预期,它们仅适用于两个点,而且大多数 Mesh->i 选项似乎都是这种情况。
【解决方案2】:

如果您想对绘图标记的位置进行比Brett's answer 提供的更多控制,那么您可能必须手动放置标记。 eg(修改Brett的例子)

data = Accumulate /@ RandomReal[{-1/2, 1}, {3, 100}];
col = {Red, Blue, Green};
decimate[i_] := {col[[i]], PointSize -> Medium, 
  Point /@ Transpose[{Range[1, 100, 10], data[[i, 1 ;; -1 ;; 10]]}]}
ListLinePlot[data, PlotStyle -> col, Epilog -> Table[decimate[i], {i, 3}]]

当然Point 可以替换为您想要的任何图形对象 - 例如TextInset 等...

【讨论】:

  • 您链接到布雷特的答案。 Yaro 回答了,但随后删除了他的贡献。
  • @belisarius:谢谢——我一定是搞糊涂了!已编辑!
  • +1 这个想法就在那里。您可以将参数添加到 decimate[] 以满足最常见的需求。不错!
  • @belisarius:是的,不知道更多关于他的数据(例如,如果它是 x,y 对)以及他想如何抽取它,试图太聪明是没有意义的在我的回答中。
  • 虽然这是一个相当复杂的解决方案,因为必须单独选择所有内容以匹配线条,但它实际上工作得很好,并且可以绝对控制选择放置标记的位置。谢谢。
【解决方案3】:

还请记住,您可以使用Tooltip 在将鼠标指针移到标记坐标上时弹出标记坐标:

【讨论】:

    【解决方案4】:

    我认为添加 Mesh->10 之类的内容应该适合您:

    data = Accumulate /@ RandomReal[{-1/2, 1}, {3, 100}];
    ListLinePlot[data, PlotMarkers -> {Automatic, Small}, Mesh -> 10]
    

    【讨论】:

    • 这似乎是方向,但即使在同一个示例中,将 Mesh->10 更改为 Mesh-> 5 或 20 也会导致异常行为,因为标记不再对应颜色或形状。
    • 例如,使用相同的代码但使用 Mesh -> 9 会给出以下图,其中(出于某种原因)仅在任何地方使用第一个图标记:ifile.it/j8g51q2
    猜你喜欢
    • 1970-01-01
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-30
    • 1970-01-01
    相关资源
    最近更新 更多