ContourPlot için daha iyi ContourLabels
ContourPlot kullandığımda PlotLegends yerine ContourLabels kullanmayı tercih ediyorum. Bununla birlikte, etiketler genellikle çerçeveye çok yakın görüntülendiğinden, bazen onları okumak zor olabilir.
Misal:
ContourPlot[
Sin[x^2 + 2 y],
{x, 0, 2}, {y, 0, 2},
Contours -> 5,
ContourLabels -> True
]
Gördüğünüz gibi bazı sayılar eksenlere çok yakın yerleştirilmiş. Arsa içinde yerleştirilebilecekleri yeterli alan olduğundan, bunun yerine çerçeveden biraz daha uzakta olmasını tercih ederim.
Bunu başarmanın bir yolu var mı? Yoksa bu etiketleri manuel olarak mı yerleştirmem gerekir?
Yanıtlar
Clear["Global`*"]
f[x_, y_] = Sin[x^2 + 2 y];
cp = ContourPlot[
f[x, y], {x, 0, 2}, {y, 0, 2}, Contours -> 5];
Konturlar için kullanılan veri noktalarını alın cp
data = Cases[cp, GraphicsComplex[data_List, __] :> data, Infinity][[1]];
Aşağıdaki her yürütüldüğünde, etiketler için rastgele bir yerleşim seçecektir (kenarlara çok yakın değerler hariç). Etiketler hala kenarlara çok yakınsa veya bitişik konturlar için olanlar örtüşüyorsa, farklı bir yerleşim elde etmek için tekrar çalıştırabilirsiniz.
Show[cp,
Epilog ->
{Text[Style[Round[f @@ #, 0.01] /. (0.) :> 0,
12, Bold], #] & /@
data[[Cases[cp, Line[pts__] :> RandomChoice[pts[[5 ;; -5]]], Infinity]]]}]
Kontur etiketlerinin bu yerleştirme sorunu en azından sürüm 9'a kadar uzanıyor. 2014'te WRI'dan aldığım bir yorum:
ContourLabels ile ilgili sorun mevcut bir sorundur ve şu anda geliştiricilerimiz tarafından üzerinde çalışılmaktadır. Bunun bir rahatsızlık olduğunu ve önerdiğiniz geçici çözümlerin, etiketlerin kesilmesini önlemek için kullanıcılara önerdiğimiz püf noktalarından bazıları olduğunu anlıyorum. Bu geçici çözümlerin dışında, ContourLabels değerinin f [x, y, z] formunun işlevleri, yani özel etiketler oluşturmasını deneyebilirsiniz. Belgelerin Ayrıntılar bölümüne bakın:http://reference.wolfram.com/mathematica/ref/ContourLabels.html
Önerilen iki geçici çözüm şunlardır:
- PlotRangePadding değerini artırın, kenarlardaki etiketler için çizimin etrafında boşluk bırakın ve
- WRI'nin önerdiği gibi işlevlerle ContourLabels seçeneğini kullanarak etiketleri kenarda manuel olarak konumlandırın