Colors 列表图中的单个点着色,Mathematica中的ErrorListPlot

Colors 列表图中的单个点着色,Mathematica中的ErrorListPlot,colors,wolfram-mathematica,plot,points,Colors,Wolfram Mathematica,Plot,Points,通过执行以下操作,我可以得到一个彩色的ListLinePlot ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False] ListPlot[ List /@ Transpose[{Range[(680 - 420)/20 + 1], Range[420, 680, 20]}], PlotMarkers -> ({Graphics

通过执行以下操作,我可以得到一个彩色的
ListLinePlot

ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False]
ListPlot[
 List /@ Transpose[{Range[(680 - 420)/20 + 1], Range[420, 680, 20]}], 
 PlotMarkers -> ({Graphics[{#, Disk[]}], 0.05} & /@ ColorData["VisibleSpectrum"] /@ Range[420, 680, 20])
]

但是,如帮助文件所示(“
ColorFunction
要求至少有一个数据集被
连接
”),如果我这样做的话

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

我所有的分数都是蓝色的。有没有一种好方法可以让
ColorFunction
ListPlot
中使用
Joined->False

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

ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> 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
?)


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

您可以使用
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
则不允许。我确信它一定与实现细节有关,但我想不出为什么会是这样。

问题是,Joined->True绘制了一条线[],可以为每个包含点指定顶点颜色。我假设在设置Joint->False时对点执行相同的操作会导致无法工作的情况。然而,在您的案例中,第[]行和第[]点的工作原理基本相同。那么这是怎么回事

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

顺便说一下,如果您仅使用ListLinePlot,其中产生的唯一行[]指令是来自您的数据的指令,那么即使您有更多的数据集和{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]

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

data = ...
ListPlot[data] /. Point[args___] :> Point[args, VertexColors -> {c1, c2, ...}]
其中,
c1
是第一个数据点的颜色,依此类推。颜色列表可以通过编程方式生成,例如

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

这种方法的优点如下

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

ErrorBarPlots
软件包中是否有类似于
ErrorListPlot
的解决方案?您可以在代码中添加类似
PlotStyle->AbsolutePointSize[5]
的内容,即绘制线条的代码,以控制最终的点大小。@Jason,
ErrorListPlot
不能使用上述短技巧着色,至少有两个原因:应该具有相同颜色的对象被分割为多个图形指令。你必须找到相应的线和点。第二个原因是,一个点有一个用于颜色的位置。
ErrorBar
有几个不同的位置。所以不清楚你喜欢用哪种颜色。检查
ErrorListPlot
InputForm