2011-12-31 15 views
10

我可以做這樣的事情個別點着色的ListPlot,ErrorListPlot在數學

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

Mathematica graphics

但是得到的彩色ListLinePlot,通過幫助文件指示(」 ColorFunction至少需要一個數據集爲Joined「),如果我這樣做相當於

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

Mathematica graphics

我所有的觀點都是藍色的。有沒有一種方法可以讓ColorFunctionJoined -> False一起工作ListPlot

也就是說,有沒有更好的方式來獲得類似

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

(同樣,沒有任何人有解釋爲什麼數學需要Joined -> True爲了利用ColorFunction?)

編輯:我也在尋找一種方式做與ErrorBarPlots包中的ErrorListPlot類似的着色。

回答

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,其中所產生的唯一的線[]指令是從你的數據的人,這應該就算你的工作有多個數據集和{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

+0

在'ErrorBarPlots'包中有'ErrorListPlot'類似的很好的解決方案嗎? – 2011-12-31 13:19:16

+0

並且您可以在代碼中添加類似'PlotStyle - > AbsolutePointSize [5]'的東西 - 即繪製線條的代碼 - 來控制最終的點大小。 – 2011-12-31 22:42:12

+0

@Jason,'ErrorListPlot'不能用像上面這樣的簡短技巧着色,原因至少有兩個:應該具有相同顏色的對象分成幾個Graphics-指令。你將不得不找到相應的線條和點。第二個原因是,*一個*點有*一個*位置,用於顏色。一個'ErrorBar'有幾個不同的位置。所以目前還不清楚你喜歡用哪一種顏色。檢查你的'ErrorListPlot'的'InputForm'。 – halirutan 2012-01-02 05:57:32

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

看起來很奇怪會讓你着色不同的點,而ListPlot不會。我確信它必須與實現細節有關,但我想不出爲什麼會這樣。

1

我碰到這個問題,我的工作也來了。我指定顏色給每個點以下面的方式:

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

其中c1是用於第一數據點的顏色,等等。顏色列表可以被編程產生,例如是

ColorData["Rainbow"] /@ ([email protected]@data/[email protected]) 

Here is the result.

該方法的良好的要點如下。

  • 它很簡單:我們有一個對的列表,然後我們創建一個相應的顏色列表。
  • 我們的原始ListPlot代碼不需要修改(例如,更改爲ListLinePlot)。