المسافة الثابتة بين القراد على محور في gnuplot


أثناء إعداد بعض النتائج للنشر في المجلة ، نشأ السؤال: كيفية توزيع البيانات بالتساوي على طول المحور في gnuplot . قررت السؤال ، حصلت على الرسومات. من يهتم كيف ، من فضلك ، تحت القط.

في البداية ، خلال سير العمل ، تم بناء جميع الرسوم البيانية في MS Excel. من الملائم للغاية رسم البيانات بسرعة ، وبناء بعض المنحنيات والمضي قدمًا. ولكن في العمل في MS Excel ، لا يوجد تحكم في الرسم الناتج. لذلك ، عند كتابة نتائج للمقالات ، غالبًا ما أستخدم gnuplot.

مطلوب لتلقي مثل هذا الرسم البياني: من



خلال مجموعة البيانات هذه

data.csv
7.3;	0.0251;	250;	217.9006251
5.3;	0.0348;	293;	238.6280188
3.3;	0.0398;	176;	177.7890558
7.4;	0.0413;	262;	229.6579533
3.2;	0.0438;	186;	180.6920998
7.2;	0.0468;	265;	233.6496388
5.1;	0.0486;	247;	248.6435206
5.2;	0.0685;	239;	263.0861645
3.4;	0.0697;	180;	199.4893097
3.1;	0.0717;	167;	200.9408317
4.3;	0.0718;	405;	358.2750638
2.2;	0.0728;	267;	255.5794728
1.1;	0.0797;	226;	314.1587397
1.3;	0.0797;	225;	314.1587397
1.2;	0.0822;	292;	315.9731422
2.4;	0.0852;	276;	264.5789092
1.4;	0.0879;	299;	320.1099799
6.4;	0.098;	362;	311.209506 
2.3;	0.102;	331;	276.771694 
2.1;	0.1021;	233;	276.8442701
6.1;	0.1182;	372;	325.8698782
4.1;	0.1263;	335;	397.8290383
4.4;	0.1436;	459;	410.3847036
4.2;	0.1455;	435;	411.7636495
6.2;	0.153;	360;	351.126361


إذا قمت بتشغيل هذا من خلال gnuplot ، فستحصل على ما يلي: دمج النقاط.



لكن هذا لا يبدو إلى حد كبير ما أردت الحصول عليه. ساعد

التوثيق الرسمي على فهم الأسماء الصحيحة للتسميات على المحور ( xtic ) والعلامات في منطقة الرسم البياني ( sprintf ):

set xtics rotate by -60
Label(String,Size) = sprintf("{/=%d %s}", Size, String)

plot "data.csv" using 2:3:xtic(2) title "1" w lp ls 1 ,\
     "data.csv" using 2:4 title "2" w lp ls 2 ,\
     "data.csv" using 2:($3>$4?$3+20:$4+20):(Label(stringcolumn(2), 12)) with labels notitle

شريحة

($3>$4?$3+20:$4+20)

يسمح لك بوضع علامات في الشكل أعلى النقاط المحددة بمقدار 20 وحدة.

اتضح بهذه الطريقة:



لكن السؤال مع التوزيع غير المتكافئ للبيانات على طول المحور ظل مفتوحًا.
تم تشكيل القرار في عملية التجول حول المنتديات والمقالات - ترقيم الخطوط .

الخيار الأسهل هو الترقيم يدويًا.

الخيار الثاني هو الترقيم تلقائيًا:

 nl -v 0 -s ';' -w 1 data.csv >> data_nums.csv 

إذا كنت بحاجة إلى استبعاد الأسطر التي تم التعليق عليها ، يأخذ الأمر الشكل:

grep -v "^#" data.csv | nl -v 0 -s ';' -w 1  >> data_nums.csv 

data_nums.csv
0;	7.3;	0.0251;	250;	217.9006251
1;	5.3;	0.0348;	293;	238.6280188
2;	3.3;	0.0398;	176;	177.7890558
3;	7.4;	0.0413;	262;	229.6579533
4;	3.2;	0.0438;	186;	180.6920998
5;	7.2;	0.0468;	265;	233.6496388
6;	5.1;	0.0486;	247;	248.6435206
7;	5.2;	0.0685;	239;	263.0861645
8;	3.4;	0.0697;	180;	199.4893097
9;	3.1;	0.0717;	167;	200.9408317
10;	4.3;	0.0718;	405;	358.2750638
11;	2.2;	0.0728;	267;	255.5794728
12;	1.1;	0.0797;	226;	314.1587397
13;	1.3;	0.0797;	225;	314.1587397
14;	1.2;	0.0822;	292;	315.9731422
15;	2.4;	0.0852;	276;	264.5789092
16;	1.4;	0.0879;	299;	320.1099799
17;	6.4;	0.098;	362;	311.209506 
18;	2.3;	0.102;	331;	276.771694 
19;	2.1;	0.1021;	233;	276.8442701
20;	6.1;	0.1182;	372;	325.8698782
21;	4.1;	0.1263;	335;	397.8290383
22;	4.4;	0.1436;	459;	410.3847036
23;	4.2;	0.1455;	435;	411.7636495
24;	6.2;	0.153;	360;	351.126361


عند العمل مع مجموعة البيانات هذه ، سيقوم gnuplot بتوزيع البيانات على طول المحور على فترات منتظمة



:

#!/usr/bin/gnuplot -persist

set encoding utf8
set terminal pngcairo size 640,400 enhanced monochrome
set output "img.png"

set ylabel "Y"
set xlabel "X"
set key left top samplen 5 spacing 1.15 width 2
set xrange [-0.5:24.5]
set mytics 2
set xtics rotate by -60
set grid
set pointsize 0.5
set datafile separator ";"
set style line 1 linetype 1 pointtype 7 linewidth 2 linecolor black
set style line 2 linetype 2 pointtype 7 linewidth 2 linecolor black

Label(String,Size) = sprintf("{/=%d %s}", Size, String)

plot "data_nums.csv" using 1:4:xtic(3) title "1" w lp ls 1 ,\
     "data_nums.csv" using 1:5 title "2" w lp ls 2 ,\
     "data_nums.csv" using 1:($4>$5?$4+20:$5+20):(Label(stringcolumn(2), 10)) with labels notitle


تحديث:
بفضل اليقظهالإلهومرجع دقيق للوثائق (الفقرة Pseudocolumns ) اتضح أنه يمكنك القيام به بدون ترقيم اصطناعي.
للتوزيع المنتظم للبيانات على طول المحور ، يمكنك استخدام العمود الفارغ ($ 0) ، الذي يوفر مؤشرات الصف.

في هذه الحالة ، من الممكن استخدام مجموعة البيانات الأصلية - data.csv ، وإجراء التغييرات التالية في البرنامج النصي:
plot "data.csv" using 0:3:xtic(2) title "1" w lp ls 1 ,\
     "data.csv" using 0:4 title "2" w lp ls 2 ,\
     "data.csv" using 0:($3>$4?$3+20:$4+20):(Label(stringcolumn(2), 12)) with labels notitle

Source: https://habr.com/ru/post/undefined/


All Articles