سؤال

لدي مجموعة من النقاط "البيانات" التي تحدد المنحنى الذي أريد رسمه بسلاسة بيزيير.لذلك أريد ملء المساحة الموجودة أسفل هذا المنحنى بين بعض أزواج قيم x.إذا كان لدي زوج واحد فقط من قيم x، فلن يكون الأمر بهذه الصعوبة لأنني أقوم بتحديد مجموعة جديدة من البيانات ورسمها باستخدام fillcu.مثال:

example of what I want to do

المشكلة هي أنني أريد أن أفعل ذلك عدة مرات في نفس المؤامرة.

يحرر:الحد الأدنى من مثال العمل:

#!/usr/bin/gnuplot
set terminal wxt enhanced font 'Verdana,12'

set style fill transparent solid 0.35 noborder
plot 'data' using 1:2 smooth sbezier with lines ls 1
pause -1

حيث يكون هيكل "البيانات" هو:

x_point y_point

وأدركت أن مشكلتي هي أنني في الواقع لا أستطيع ملء ولا حتى منحنى واحد، يبدو أنه ممتلئ لأن المنحدر ثابت تقريبًا هناك.

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

المحلول

لملء الأجزاء الموجودة أسفل المنحنى، يجب عليك استخدام filledcurves أسلوب.مع الخيار x1 تقوم بملء الجزء الموجود بين المنحنى والمحور السيني.

لملء أجزاء المنحنى فقط، يجب عليك تصفية بياناتك، على سبيل المثال.إعطاء قيم x قيمة 1/0 (نقطة بيانات غير صالحة) إذا كانت خارج النطاق المطلوب، والقيمة الصحيحة من ملف البيانات خلاف ذلك.في النهاية قمت برسم المنحنى نفسه:

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
     ''  using 1:2 with lines lw 3 lt 1 title 'curve'

هذا يملأ النطاق [-1:0.5] و [0.2:0.8].

ولإعطاء مثال عملي، أستخدم اسم الملف الخاص +:

set samples 100
set xrange [-2:2]
f(x) = -x**2 + 4

set linetype 1 lc rgb '#A3001E'

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot '+' using (filter($1, -1, -0.5)):(f($1)) with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):(f($1)) with filledcurves x1 lt 1 notitle,\
     ''  using 1:(f($1)) with lines lw 3 lt 1 title 'curve'

بالنتيجة (مع 4.6.4):

enter image description here

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

set table 'data-smoothed'
plot 'data' using 1:2 smooth bezier
unset table

set style fill transparent solid 0.35 noborder
filter(x,min,max) = (x > min && x < max) ? x : 1/0
plot 'data-smoothed' using (filter($1, -1, -0.5)):2 with filledcurves x1 lt 1 notitle,\
     ''  using (filter($1, 0.2, 0.8)):2 with filledcurves x1 lt 1 notitle,\
     ''  using 1:2 with lines lw 3 lt 1 title 'curve'
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top