ContourPlot के लिए बेहतर कंटूरलैबल्स

Aug 30 2020

जब मैं ContourPlot का उपयोग करता हूं तो मैं PlotLegends का उपयोग करने के बजाय ContourLabels का उपयोग करना पसंद करता हूं। हालांकि लेबल अक्सर फ्रेम के बहुत करीब प्रदर्शित होते हैं इसलिए कभी-कभी उन्हें पढ़ना मुश्किल हो सकता है।

उदाहरण:

 ContourPlot[
    Sin[x^2 + 2 y],
    {x, 0, 2}, {y, 0, 2},
    Contours -> 5,
    ContourLabels -> True
 ]

जैसा कि आप देख सकते हैं कुछ संख्याओं को कुल्हाड़ियों के बहुत करीब रखा गया है। चूंकि प्लॉट में पर्याप्त जगह है, जहां उन्हें रखा जा सकता है, इसलिए मैं उन्हें फ्रेम से थोड़ा आगे रखना पसंद करूंगा।

क्या इसे प्राप्त करने का एक तरीका है? या मुझे उन लेबलों को मैन्युअल रूप से रखने की आवश्यकता होगी?

जवाब

2 BobHanlon Aug 30 2020 at 22:36
Clear["Global`*"]

f[x_, y_] = Sin[x^2 + 2 y];

cp = ContourPlot[
   f[x, y], {x, 0, 2}, {y, 0, 2}, Contours -> 5];

में आकृति के लिए उपयोग किए जाने वाले डेटा बिंदुओं को प्राप्त करें cp

data = Cases[cp, GraphicsComplex[data_List, __] :> data, Infinity][[1]];

हर बार जब इसे निष्पादित किया जाता है, तो यह बेतरतीब ढंग से लेबल के लिए एक स्थान का चयन करेगा (किनारों के पास मूल्यों को छोड़कर)। यदि लेबल अभी भी किनारों के करीब हैं या आसन्न आकृति ओवरलैप के लिए हैं, तो आप एक अलग स्थान प्राप्त करने के लिए फिर से निष्पादित कर सकते हैं।

Show[cp,
 Epilog ->
  {Text[Style[Round[f @@ #, 0.01] /. (0.) :> 0,
       12, Bold], #] & /@ 
    data[[Cases[cp, Line[pts__] :> RandomChoice[pts[[5 ;; -5]]], Infinity]]]}]

1 tad Aug 31 2020 at 00:46

समोच्च लेबल की यह नियुक्ति समस्या कम से कम संस्करण 9 तक जाती है। 2014 में मुझे WRI से एक टिप्पणी मिली:

कंटूरलैबल्स के साथ समस्या एक मौजूदा है, यह वर्तमान में हमारे डेवलपर्स द्वारा काम किया जा रहा है। मैं समझता हूं कि यह एक असुविधा है और आपके द्वारा सुझाए गए वर्कअराउंड भी कुछ ऐसे ट्रिक्स हैं जो हम उपयोगकर्ताओं को यह सुझाव देते हैं कि लेबल को छोटा करने से बचें। इन वर्कअराउंड से इतर आप कॉन्टूरलैबल्स के मूल्य को फार्म f [x, y, z] के कार्य के रूप में आजमा सकते हैं, यानी कस्टम लेबल बना सकते हैं। प्रलेखन के विवरण अनुभाग के तहत देखें:http://reference.wolfram.com/mathematica/ref/ContourLabels.html

सुझाए गए दो वर्कअराउंड हैं

  1. किनारों पर लेबल के लिए प्लॉट के चारों ओर जगह देने के लिए, प्लॉटरेंजपैडिंग बढ़ाएँ, और
  2. WRI द्वारा सुझाए गए कार्यों के साथ ContourLabels विकल्प का उपयोग करके किनारे पर लेबल को मैन्युअल रूप से रखें