10

ListLinePlot我可以通过做类似的事情来获得颜色

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

数学图形

但是,如帮助文件所示(“ColorFunction需要至少一个数据集Joined”),如果我执行等效操作

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

数学图形

我所有的点都是蓝色的。有没有一种很好的方式来ColorFunction工作?ListPlotJoined -> 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 需要Joined -> True使用ColorFunction?)

编辑:我也在寻找一种ErrorListPlotErrorBarPlots包装中进行类似着色的方法。

4

3 回答 3

7

问题是,Joined->True 绘制了一个 Line[],可以为每个包含点指定 VertexColors。我假设在设置 Joined->False 时对这些点做同样的事情会导致它不起作用的情况。尽管如此, Line[] 和 Point[] 在您的情况下工作几乎相同。那么是关于什么的

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

数学图形

而且,顺便说一句,如果您仅使用 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]

数学图形

于 2011-12-31T13:04:54.647 回答
3

您可以使用DiscretePlot

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

数学图形

如果您正在绘制 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]

数学图形

看起来确实很奇怪,它DiscretePlot会让你对点进行不同的着色,而ListPlot不会。我确信它一定与实现细节有关,但我想不出为什么会这样。

于 2011-12-31T13:02:28.280 回答
1

我在工作中也遇到过这个问题。我通过以下方式为每个点分配颜色:

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

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

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

这是结果。

该方法的优点如下。

  • 这很简单:我们有一个配对列表,然后我们创建一个相应的颜色列表。
  • 我们的原始ListPlot代码不需要修改(例如,更改为ListLinePlot)。
于 2013-03-23T00:55:02.383 回答