ListPlot中的单个点着色,Mathematica中的ErrorListPlot

时间:2011-12-31 12:30:36

标签: colors wolfram-mathematica plot points

通过执行类似

的操作,我可以获得彩色ListLinePlot
ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False]

Mathematica graphics

但是,如帮助文件所示(“ColorFunction至少需要一个数据集为Joined”),如果我做了相同的

ListPlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False]

Mathematica graphics

我的所有观点都是蓝色的。是否有一种很好的方式让ColorFunctionListPlot Joined -> False一起工作?

也就是说,有没有更好的方法来获得像

这样的东西
ListPlot[
 List /@ Transpose[{Range[(680 - 420)/20 + 1], Range[420, 680, 20]}], 
 PlotMarkers -> ({Graphics[{#, Disk[]}], 0.05} & /@ ColorData["VisibleSpectrum"] /@ Range[420, 680, 20])
]

Mathematica graphics

(另外,有没有人解释为什么 Mathematica需要Joined -> True才能使用ColorFunction?)

编辑:我也在寻找一种方法,使用ErrorListPlot包中的ErrorBarPlots进行类似的着色。

3 个答案:

答案 0 :(得分:7)

问题是,Joined-> True绘制了一个Line [],可以为每个包含点赋予VertexColors。我假设在设置Joined时使用相同的点 - > False导致它不起作用的情况。尽管如此,Line []和Point []在您的情况下的工作方式基本相同。那么什么是

ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", 
  ColorFunctionScaling -> False] /. Line[arg___] :> Point[arg]

Mathematica graphics

顺便说一句,如果你只使用ListLinePlot,那里唯一的Line []指令就是数据中的指令,即使你有更多的数据集和{x,y}坐标

data = Transpose[Table[{{x, Sin[x]}, {x, Cos[x]}}, {x, 0, 2 Pi, 0.2}]];
ListLinePlot[data, ColorFunction -> Hue] /. Line[arg___] :> Point[arg]

Mathematica graphics

答案 1 :(得分:3)

您可以使用DiscretePlot

data = Range[420, 680, 20];
DiscretePlot[data[[i]], {i, Length[data]},
   ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False,
   Filling -> None]

Mathematica graphics

如果你正在绘制一个x,y点的列表,那就会变得有点棘手:

data = Transpose[{Range[420, 680, 20], Range[400, 530, 10]}];
mapping = Apply[Rule, data, 2];
DiscretePlot[i/.mapping, {i, data[[;;,1]]},
   ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False,
   Filling -> None]

Mathematica graphics

DiscretePlot会让您对点进行不同的着色,而ListPlot则不会。我确信它必须与实现细节有关,但我想不出为什么会出现这种情况的原因。

答案 2 :(得分:1)

我在工作中也遇到了这个问题。我按以下方式为每个点指定一种颜色:

data = ...
ListPlot[data] /. Point[args___] :> Point[args, VertexColors -> {c1, c2, ...}]

其中c1是第一个数据点的颜色,依此类推。可以以编程方式生成颜色列表,例如

ColorData["Rainbow"] /@ (Range@Length@data / Length@data)

Here is the result.

这种方法的优点如下。

  • 这很简单:我们有一对配对列表,然后我们创建一个相应的颜色列表。
  • 我们原来的ListPlot代码无需修改(例如,更改为ListLinePlot)。