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
。