الرسم البياني مع المحور السيني الرقمي في gnuplot؟

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

  •  26-09-2019
  •  | 
  •  

سؤال

أنا أواجه هذا الملف data.dat:

Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00

يمكنني رسم هذه البيانات كرسوم بيانية مع هذا البرنامج النصي ، hist-v1.gplot (استخدام set style data histogram):

set xlabel "X values"
set ylabel "Occurence"
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v1.png'
set boxwidth 0.9
# attempt to set xtics so they are positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# ti col reads the first entry of the column, uses it as title name 
plot 'data.dat' using 2:xtic(1) ti col,  '' u 3 ti col, '' u 4 ti col, '' u 5 ti col

ودعوة:

gnuplot hist-v1.gplot && eog hist-v1.png

تم إنشاء هذه الصورة:image hist-v1.png

ومع ذلك ، يمكنك أن تلاحظ أن محور X لم يتم تحجيمه عدديًا - فهو يفهم قيم X كفئات (أي أنه محور فئة).

يمكنني الحصول على محور X أكثر عدديًا مع البرنامج النصي التالي ، hist-v2.gplot (استخدام with boxes):

set xlabel "X values"
set ylabel "Occurence"
# in this case, histogram commands have no effect
set style data histogram
set style histogram cluster gap 1
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using 1:2 ti col smooth frequency with boxes, '' u 1:3 ti col smooth frequency with boxes

ودعوة:

gnuplot hist-v2.gplot && eog hist-v2.png

تم إنشاء هذه الصورة:صورة HIST-V2.PNG http://img266.imageshack.us/img266/6717/histv2

لسوء الحظ ، فإن القضبان "تداخل" هنا ، لذلك من الصعب قراءة الرسم البياني.

هل هناك طريقة للحفاظ على المحور العددي X كما في hist-v2.png, ، لكن حافظ على "الحانات" جنبًا إلى جنب hist-v1.png؟ هذا الموضوع، "رد: رسم بياني مع خطأ في تاريخ المحور x"يقول لا يمكنك:

ولكن سيكون من الصعب سحب تاريخ الإحداثيات X خارج ملف البيانات ، ...

ولكن بعد ذلك ، يشير إلى مشكلة مختلفة ...

شكرًا،

هتافات!

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

المحلول

حسنًا ، بعد قراءة gnuplot مساعدة قليلاً ، يبدو أن نمط الرسم البياني "سوف يفسر" دائمًا "محور X على أنه إدخالات/فئات متسلسلة - لذلك في الواقع ، لا توجد طريقة للحصول على محور رقمي بأسلوب رسم بياني.

ومع ذلك ، اتضح ذلك $ يمكن أن تشير إلى عمود ، ويمكن استخدام تلك في الواقع "إعادة وضع" القضبان في الثانية (frequency with boxes نمط) مثال ؛ لذلك مع هذا الرمز كما hist-v2b.gplot:

set xlabel "X values"
set ylabel "Occurence"
set style fill solid border -1
set term png
set output 'hist-v2.png'
set boxwidth 0.9
set xr [330:400]
# here, setting xtics makes them positioned numerically on x axis:
set xtics ("332" 332, "336" 336, "340" 340, "394" 394, "398" 398, "1036" 1036)  
# 1:2 will ONLY work with proper xr; since we have x>300; xr[0:10] generates "points y value undefined"!
plot 'data.dat' using ($1-0.5):2 ti col smooth frequency with boxes, '' u ($1-0.25):3 ti col smooth frequency with boxes, '' u ($1+0.25):4 ti col smooth frequency with boxes, '' u ($1+0.5):5 ti col smooth frequency with boxes

ودعوة:

gnuplot hist-v2b.gplot && eog hist-v2b.png

تم إنشاء هذه الصورة:صورة HIST-V2B.PNG http://img823.imageshack.us/img823/805/Histv2b.png

... وهو ما أردت في المقام الأول.

مجرد ملاحظة صغيرة - أردت في الأصل استخدام البرنامج النصي مع البيانات المضمنة ؛ لإعداد مثل هذا ، يجب أن تتم كتابته كـ

plot '-' using ($1-0.5):2 ti col smooth frequency with boxes, '-' u ($1-0.25):3 ti col smooth frequency with boxes
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end
Xstep Y1 Y2 Y3 Y4
332 1.22 0.00 0.00 1.43
336 5.95 12.03 6.11 10.41
340 81.05 81.82 81.92 81.05
394 11.76 6.16 10.46 5.87
398 0.00 0.00 1.51 1.25
1036 0.03 0.00 0.00 0.00
end

... أي أنه يجب إدخال البيانات عدة مرات ، حيث تأتي من stdin - تتم مناقشة هذه المشكلة في GNUPLOT - قم بإجراء مخططات متعددة من ملف البيانات مع أوامر مدمجة.

هتافات!

ملاحظة: نظرًا لوجود مساحة كبيرة على الرسم البياني ، سيكون من الرائع أن نحدد بطريقة أو بأخرى نطاقات محور X منفصل ؛ تمت مناقشته في:

نصائح أخرى

يعد ضبط عرض المربع أمرًا مهمًا جدًا عند رسم رسم بياني باستخدام نمط مؤامرة "صناديق". في أحد مقال مدونتي ، تحدثت عن ذلك. إذا كان أي فائدة , انقر فوق هنا!

enter image description here

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