2011-08-16 8 views
7

मैं गणित में विभिन्न प्रकार के साजिश/चार्ट ड्राइंग के लिए एक आवेदन बना रहा हूं। आखिरकार इसमें एक जीयूआई होगा, लेकिन पहला कदम कोड को सही तरीके से प्राप्त करना है, और जीयूआई को प्रबंधित करने के लिए काफी आसान है। मुझे किंवदंतियों को उनके चारों ओर कोई फ्रेम नहीं रखने में कठिनाई हो रही है।क्या बारचार्ट लीजेंड पर फ्रेम सीमा हटा दी जा सकती है?

यहाँ एक न्यूनतम उदाहरण के साथ BarChart पर कुछ विकल्प पहले से ही SetOptions का उपयोग कर अनुकूलित यहाँ है (

mydata = {4.5644, 5.546, 6.8674, 2.7688, 1.742, 5.3952, 4.3392, 4.5016, \ 
3.7748, 1.838, 2.24, 0.693, 2.818, 4.9, 3.939, 3.459, 3.755, 4.475, \ 
3.857, 3.215, 2.206, 2.206, 2.117, 3.403, 3.277, 3.761, 4.276, 2.559, \ 
3.486, 4.778, 2.281, 2.865, 3.629, 4.916, 4.572, 5.244, 5.395, 2.865, \ 
-0.524, 5.01, 4.401, 4.513, 4.54} 

BarChart[mydata, 
ChartStyle -> {Join[ 
    Table[RGBColor[0.5, 0.5, 0.95], {Length[mydata] - 3}], {Magenta, 
    Magenta, Magenta}]}, PlotRange -> {-2, 8}, 
ChartLegends -> {Join[ 
    Table[None, {Length[mydata] - 3}], {Placed[ 
    Style["Forecasts", FontFamily -> "Arial", FontSize -> 18], 
    Bottom]}]}, BarSpacing -> 0.4, 
LegendAppearance -> Directive[Background -> Red, 
    Frame -> None, ImageSize -> 15]] 

और है कि मैं क्या मिलता है:। के रूप में मैं हो सकता है enter image description here

प्रयास करें, मैं नहीं मिल सकता है पौराणिक कथाओं के चारों ओर उस सीमा से छुटकारा पाएं। आप देख सकते हैं कि LegendAppearance कुछ भी नहीं करता है - मैंने इसके कुछ अन्य दृष्टिकोण भी आजमाए हैं।

मैं थोड़ा रेक्ट को कोड करने के लिए reticent हूँ हाथ से नाखून, क्योंकि अंतिम जीयूआई में सही होना मुश्किल होगा। ChartLabels या तो काम नहीं करेगा, क्योंकि पहले से ही ग्राफ के वास्तविक संस्करण में दिनांक लेबल के लिए उपयोग किया जा रहा है।

क्या किसी के पास कोई सुझाव है?

उत्तर

8

आप अस्थायी रूप से, विश्व स्तर पर फ्रेम की स्थापना करके मार सकते हैं:

SetOptions[Legending`GridLegend, Legending`LegendContainer -> Identity] 

डिफ़ॉल्ट व्यवहार को बहाल करने के लिए, सेट करें:

SetOptions[Legending`GridLegend, Legending`LegendContainer -> Automatic] 
+0

+1: क्षमा करें, मैं घर बीमार हूं और केवल यह जांचने के लिए चारों ओर मिल गया है कि यह काम करता है। यह v8 पर काम करता है, और यह एक तरह की चीज है जिसे मैं पैकेज में डिफ़ॉल्ट रूप से रख सकता हूं। धन्यवाद! – Verbeia

+0

बहुत, बहुत दिलचस्प: 'Legending '*' (जहां कि उद्धरण चिह्न एक backquote है) गैर-दस्तावेजी बिट और टुकड़े की एक पूरी गुच्छा .: AssembleLegendContainer \t ContourLegend \t लीजेंड देता \t LegendImage \t LegendPane \t महापुरूष BubbleScaleLegend \t CurveLegend \t LegendContainer \t LegendItemLayout \t LegendPosition \t LegendSize ColorGradientLegend \t GridLegend \t LegendHeading \t LegendLayout \t LegendReap \t LegendSow – Verbeia

+1

@Verbeia पुष्टि है कि यह काम करता है के लिए धन्यवाद, और मुझे आशा है कि यह उपयोगी है। क्षमा करें * मुझे * अगर मैं अधीर लग रहा था। मैं नहीं था। इसके बजाय, एक कामकाजी समाधान आमतौर पर आठ घंटों के बाद कम से कम एक वोट प्राप्त करता है, इसलिए मैंने सोचा कि शायद यह अनियंत्रित विकल्प संस्करण 8 में हटा दिया गया था। (बीटीडब्ल्यू, मुझे लगता है कि आप कोड ब्लॉक के लिए डबल बैकटिक्स का उपयोग कर बैकटिक एम्बेड कर सकते हैं। कोशिश करें: ''? किंवदंती' * '') –

10

मुझे फ्रेम बंद करने के लिए कोई विकल्प नहीं मिल रहा है। LegendAppearance के लिए प्रलेखन काफी कम है और सामान्य रूप से किंवदंतियों की स्टाइल को अधिक चर्चा नहीं मिलती है (देखें [2] और भीतर लिंक)।

सबसे आसान समाधान मैं सोच सकता हूं कि ग्राफिक्स को मैन्युअल रूप से संशोधित करना है। किंवदंतियों के साथ चार्ट Labeled ग्राफिक्स वस्तुओं का उत्पादन करते हैं। एक किंवदंती के लिए, उत्पादित Labeled ऑब्जेक्ट Labeled[Graphics[...], Framed[...], pos] जैसा दिखता है, इसलिए आपको केवल Framed भाग को निकालना है। यह (उदा। BarChart[...] /. Framed -> Identity) का उपयोग कर सभी Framed प्रमुखों को हटाया जा सकता है, लेकिन हो सकता है कि कुछ और लक्षित लक्षित हो।

mydata = {4.5644, 5.546, 6.8674, 2.7688, 1.742, 5.3952, 4.3392, 
    4.5016, 3.7748, 1.838, 2.24, 0.693, 2.818, 4.9, 3.939, 3.459, 
    3.755, 4.475, 3.857, 3.215, 2.206, 2.206, 2.117, 3.403, 3.277, 
    3.761, 4.276, 2.559, 3.486, 4.778, 2.281, 2.865, 3.629, 4.916, 
    4.572, 5.244, 5.395, 2.865, -0.524, 5.01, 4.401, 4.513, 4.54}; 

bc = BarChart[{Legended[Style[mydata[[;; -4]], Red], "Data"], 
    Legended[Style[mydata[[-3 ;;]], Blue], "Forecasts"]}, 
    PlotRange -> {-2, 8}, BarSpacing -> 0.4, LegendAppearance -> "Row"] 

with frame

bc /. Labeled[g_, Framed[leg_], pos_] :> Labeled[g, leg, pos] 

with frame removed

ऊपर भी Replace[bc, Framed[leg_] :> leg, {1}] या MapAt[Apply[Identity, #] &, bc, 2] या समरूप निर्माण का उपयोग कर उत्पादन किया जा सकता। यदि आपके पास अधिक लेबल या विभिन्न प्रकार के ग्राफिक्स ऑब्जेक्ट हैं तो कोड को संशोधित करने में बहुत कुछ नहीं लगेगा।

+0

+1 मैं के बारे में सुझाव देने के लिए था एक ही समाधान, लेकिन आपका पूरा हो गया है। 'लीजेंडएपियरेंस' नाम से अधिक अभ्यास करता है जो अभ्यास में ऐसा लगता है। –

+0

+1 - धन्यवाद साइमन, दूसरा उदाहरण ('/ लेबल लेबल [g_, फ़्रेमयुक्त [leg_], pos_] का उपयोग करके:> लेबल किया गया [जी, पैर, pos]') वास्तव में क्या करना चाहिए, भले ही साजिश के पास हो एक 'फ्रेम'। सामान्य मामला एडीएन को देखना दिलचस्प होगा कि क्या यह एक जीयूआई में किया जा सकता है। – Verbeia

+0

@ सिमॉन 'इनपुटफॉर्म [बीसी] ', संभवतया' (इनपुटफॉर्म [बीसी /। {फ़्रेमयुक्त [legend_]:> किंवदंती}]) [[1]] ', यह स्पष्ट करने में सहायता करता है कि आपका समाधान क्यों काम करता है। '[[1]]' 'इनपुटफॉर्म []' रैपर को हटा देता है। – DavidC

3

के रूप में बहुमुखी नहीं के रूप में Simon की विधि दी above, लेकिन फिर भी संभवतः पोस्टिंग लायक है।(मैं इस में पता चला है, जबकि this प्रश्न पढ़ने) Part, जहां bc के रूप में परिभाषित किया गया है का उपयोग करते हुए

साइमन के answer:

bc[[2]] = bc[[2, 1]]; bc 

देने

enter image description here