أثناء إعداد بعض النتائج للنشر في المجلة ، نشأ السؤال: كيفية توزيع البيانات بالتساوي على طول المحور في gnuplot . قررت السؤال ، حصلت على الرسومات. من يهتم كيف ، من فضلك ، تحت القط.في البداية ، خلال سير العمل ، تم بناء جميع الرسوم البيانية في MS Excel. من الملائم للغاية رسم البيانات بسرعة ، وبناء بعض المنحنيات والمضي قدمًا. ولكن في العمل في MS Excel ، لا يوجد تحكم في الرسم الناتج. لذلك ، عند كتابة نتائج للمقالات ، غالبًا ما أستخدم gnuplot.مطلوب لتلقي مثل هذا الرسم البياني: من
خلال مجموعة البيانات هذهdata.csv7.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.csv0; 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