2012-01-22 69 views
2

我可以畫出相應的隱式的曲線:ContourPlot:風格化的輪廓線

ContourPlot[x^2 + (2 y)^2 == 1, {x, -1, 1}, {y, -1, 1}] 

但我不能找到一種方法,根據顏色的點的位置的輪廓線。更確切地說,我想用2種顏色對曲線進行着色,具體取決於是否x²+y²< k。

我看着ColorFunction,但這只是爲了給輪廓線之間的區域着色。 我無法讓ContourStyle接受一個依賴於位置的表達式。

回答

7

你可以使用RegionFunction以一分爲二的情節:

Show[{ 
    ContourPlot[x^2 + (2 y)^2 == 1, {x, -1, 1}, {y, -1, 1}, 
    RegionFunction -> Function[{x, y, z}, x^2 + y^2 < .5], 
    ContourStyle -> Red], 
    ContourPlot[x^2 + (2 y)^2 == 1, {x, -1, 1}, {y, -1, 1}, 
    RegionFunction -> Function[{x, y, z}, x^2 + y^2 >= .5], 
    ContourStyle -> Green] 
}] 

Mathematica graphics

+0

+1在我意識到自己比我早了整整一個小時就解決了問題後,我刪除了我的解決方案(與您的解決方案几乎完全相同)。 – DavidC

6

也許這樣的事情

pl = ContourPlot[x^2 + (2 y)^2 == 1, {x, -1, 1}, {y, -1, 1}] 
points = pl[[1, 1]]; 
colorf[{x_, y_}] := ColorData["Rainbow"][Rescale[x, {-1, 1}]] 
pl /. {Line[a_] :> {Line[a, VertexColors -> colorf /@ points[[a]]]}} 

產生

Mathematica graphics

+0

謝謝你這個有用的答案。它使用戶能夠使用連續的顏色,這是對其他答案的很好補充。 – tos

+0

+1好的後期處理。 –

1

這不能爲您的問題提供直接解決方案,但我相信這是有趣的。

使用我認爲是未公開的格式(即圍繞Line對象的Function),可以從ContourPlot內逐漸着色線條。在內部,這與Heike所做的相似,但她的解決方案使用頂點號碼來查找匹配的座標,從而允許通過空間位置進行造型,而不是沿着線的位置。

ContourPlot[ 
    x^2 + (2 y)^2 == 1, {x, -1, 1}, {y, -1, 1}, 
    BaseStyle -> {12, Thickness[0.01]}, 
    ContourStyle -> 
    (Line[#, VertexColors -> ColorData["DeepSeaColors"] /@ [email protected]#] & @@ # &) 
] 

Mathematica graphics

0

對於有些不夠熟練,較少的信息是更。浪費時間瀏覽設置輪廓線顏色的方法,直到我偶然看到Roelig編輯的答案。我只需要ContourStyle []。

Show[{ContourPlot[ 
    x^2 + 2 x y Tan[2 # ] - y^2 == 1, {x, -3, 3}, {y, -3.2, 3.2}, 
    ContourStyle -> Green] & /@ Range[-Pi/4, Pi/4, .1]}, 
Background -> Black]