كيف يمكنني تبرير الملصقات عند رسم "مع العلامات" في Gnuplot؟

StackOverflow https://stackoverflow.com/questions/3439341

  •  27-09-2019
  •  | 
  •  

سؤال

ينتج الأمر المؤامرة التالي مخطط شريط ، وفوق كل شريط يتم رسم القيمة على أنها تسمية ، منسقة مع GPRINTF:

plot "data.txt" using 6:1 index 0 notitle with boxes linestyle 1,\
     "data.txt" using 6:(0.7):(gprintf("%5.2f", $1)) index 0 notitle \
                                       with labels font "Courier,34" rotate left

أرغب في أن تكون ملصقات القيمة محاذاة حتى أتمكن من استخدام خط Helvetica المظهر الجميل بدلاً من Courier لمحاذاة النقاط العشرية.

لذا ، كيف يمكنني تضمين التبرير في الأمر أعلاه؟

لقد فشلت في العثور على أي شيء عن هذه المشكلة المحددة في وثائق GNUPLOT أو على الويب. يمكن تبرير الملصقات الأخرى بسهولة ، ولكن هل من الممكن أيضًا التآمر مع الملصقات؟

هل كانت مفيدة؟

المحلول

لا يمكنني اختبار مثالك الخاص ، لكن لديّ يبدو لي:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels rotate left notitle
...

... أين ال "rotate left"تم أخذ جزء من البروتوكول الاختياري.

حسنًا ، لم يكن لدي حظ كبير في العثور على معلومات حول "المحاذاة" أو "تبرير" الملصقات على الشبكة ؛ لذلك حاولت أن أنظر في مساعدة gnuplot على الإنترنت. في الأساس ، الأشياء ذات الصلة تحت help set label - لست متأكدًا تمامًا من كيفية النزول إليها ، ولكن هنا سجل الأوامر أدناه ؛

$ gnuplot
...
    G N U P L O T
    Version 4.4 patchlevel 2
...

Terminal type set to 'wxt'
gnuplot> help with labels
Sorry, no help for 'with labels'
gnuplot> help with 
 Functions and data may be displayed in one of a large number of styles.
 The `with` keyword provides the means of selection.

 Syntax:
       with  { {linestyle | ls }
...
where  is one of

      lines        dots       steps     errorbars     xerrorbar    xyerrorlines
      points       impulses   fsteps    errorlines    xerrorlines  yerrorbars
      linespoints  labels  ...
...
gnuplot> help labels
 The `labels` style reads coordinates and text from a data file and places
 the text string at the corresponding 2D or 3D position.  3 or 4 input columns
 of basic data are required.  ....

      3 columns:  x  y  string    # 2D version
...
 See also `datastrings`, `set style data`.

gnuplot> help set label
 Arbitrary labels can be placed on the plot using the `set label` command.

 Syntax:
       set label {} {""} {at }
                 {left | center | right}
                 {norotate | rotate {by }}
                 ...
 By default, the text is placed flush left against the point x,y,z.  لضبط الطريقة التي يتم بها وضع الملصق فيما يتعلق بالنقطة X أو Y أو Z أو إضافة معلمة التبرير ، والتي قد تكون "يسار" أو "يمين" أو "مركز" ،
 indicating that the point is to be at the left, right or center of the text.
 Labels outside the plotted boundaries are permitted but may interfere with
 axis labels or other text.

 إذا تم إعطاء "الدوران" ، فسيتم كتابة التسمية عموديًا (if the terminal can do
 so, of course).  إذا تم تدويرها بواسطة " conforming terminals will
 try to write the text at the specified angle; non-conforming terminals will
 treat this as vertical text.

الأجزاء ذات الصلة جريئة. ويشرحون اعتقادًا خاطئًا واحد - رؤية rotate left في مثال OP ، فكرت left هو سمة rotate, ومع ذلك ليس كذلك - left هي معلمة تبرير منفصلة ، بينما rotate هي الكلمة الرئيسية للتناوب المنفصل (أي rotate left لا يعني "تدوير عكس اتجاه عقارب الساعة 90 درجة"كما اعتقدت في البداية).

إذا كان الأمر كذلك ، فيمكن للمرء أن يقلل من هاتين الكلمة الرئيسية:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels left rotate notitle
...

... واحصل على نفس مؤامرة الإخراج بالضبط. وإذا استبدلنا أخيرًا left مع right, ، كما في:

...
plot "test.dat" using ..., \
"" using ($1-100000):2:3 with labels right rotate notitle
...

... يمكننا أن نرى أن التسمية ما يزال تم تدوير "اليسار" (90 درجة بعكس اتجاه عقارب الساعة) - ومع ذلك ، أصبح الآن محاذاة اليمين لهذا الموضع.

حسنًا ، أتمنى أن يساعد هذا ،
هتافات!

نصائح أخرى

يمكنك تحديد عرض الحقل المطبوع ليكون 5 مسافات ، باستخدام "%5.2f" صيغة. يستهلك ذلك مساحتين للجزء الكسري ، ومساحة واحدة للنقطة العشرية ، مما يترك مساحتين فقط لجزء صحيح من الرقم. لذا ، إذا قمت برسم أرقام غير ذلك 0.7 التي حددتها ، ستكون السلسلة الناتجة أوسع. أيضًا ، Helvetica هو محرف غير مونسبس ، لذلك فإن عرض الأحرف للأرقام ليست هي نفسها. وبالتالي ، فإن التحالف اليمين للمخرج لن يحل المشكلة-".11" و ".88" لن يكون محاذاة من النقاط العشرية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top