通过执行类似
的操作,我可以获得彩色ListLinePlot
ListLinePlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False]
但是,如帮助文件所示(“ColorFunction
至少需要一个数据集为Joined
”),如果我做了相同的
ListPlot[Range[420, 680, 20], ColorFunction -> "VisibleSpectrum", ColorFunctionScaling -> False]
我的所有观点都是蓝色的。是否有一种很好的方式让ColorFunction
与ListPlot
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需要Joined -> True
才能使用ColorFunction
?)
编辑:我也在寻找一种方法,使用ErrorListPlot
包中的ErrorBarPlots
进行类似的着色。
答案 0 :(得分: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]
答案 1 :(得分: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
则不会。我确信它必须与实现细节有关,但我想不出为什么会出现这种情况的原因。
答案 2 :(得分:1)
我在工作中也遇到了这个问题。我按以下方式为每个点指定一种颜色:
data = ...
ListPlot[data] /. Point[args___] :> Point[args, VertexColors -> {c1, c2, ...}]
其中c1
是第一个数据点的颜色,依此类推。可以以编程方式生成颜色列表,例如
ColorData["Rainbow"] /@ (Range@Length@data / Length@data)
这种方法的优点如下。
ListPlot
代码无需修改(例如,更改为ListLinePlot
)。