আমি স্ট্যান্ডার্ড ইনপুট থেকে সংখ্যার ক্রমিকের একটি গ্রাফিকাল প্লট কীভাবে তৈরি করতে পারি?


38

যদি একটি দীর্ঘ পাঠ্য ফাইল থাকে এবং আমি প্রদত্ত প্যাটার্নটি ঘটে সেই সমস্ত লাইন প্রদর্শন করতে চাই, তবে আমি এটি করি:

grep -n form innsmouth.txt | cut -d : -f1

এখন, আমার সংখ্যার ক্রম রয়েছে (প্রতি লাইনে একটি নম্বর)

আমি এক্স-অক্ষের সংঘটন এবং y- অক্ষের রেখা নম্বর সহ 2 ডি গ্রাফিকাল উপস্থাপনা করতে চাই। আমি কীভাবে এটি অর্জন করতে পারি?

এখানে চিত্র বর্ণনা লিখুন


1
আপনি সংঘটন দ্বারা কী বোঝাতে চেয়েছিলেন? আপনি কি বোঝাতে চেয়েছেন যে একটি নির্দিষ্ট নম্বর ফাইলটিতে কতবার পাওয়া যায়? বা আপনি কি কেবলমাত্র x- অক্ষের সংখ্যার প্রকৃত মান এবং যে সংখ্যাটি y- অক্ষের উপরে খুঁজে পেয়েছিলেন তা চান?
টেরডন

আমি ঘটনাক্রমে বলতে চাইছি কেবল একটি ক্রমের মধ্যে একটি প্যাটার্ন পাওয়া গেছে। উদাহরণস্বরূপ: 400 লাইনে প্রথমবার, 410 লাইনে দ্বিতীয়বার, তৃতীয় বার 412 লাইনে ...
আবদুল আল হ্যাজেড

উত্তর:


44

আপনি এটির gnuplotজন্য ব্যবহার করতে পারেন :

 primes 1 100 |gnuplot -p -e 'plot "/dev/stdin"'

যেমন কিছু উত্পাদন

এখানে চিত্র বর্ণনা লিখুন

আপনি গ্রাফের উপস্থিতি আপনার হৃদয়ের আনন্দ, বিভিন্ন চিত্রের ফর্ম্যাটে আউটপুট ইত্যাদি কনফিগার করতে পারেন


2
আমি gnuplot ডাউনলোড করেছি এবং এটি প্রবেশ করে পরীক্ষা করার চেষ্টা করেছি: 100 Seq | gnuplot -p -e 'প্লট "/ দেব / স্টিডিন" "। আশ্চর্যজনকভাবে কোনও গ্রাফ উপস্থিত হয়নি, তবে প্রস্থান কোডটি (প্রতিধ্বনি $?) 0 ছিল, সুতরাং কোনও ত্রুটি উপস্থিত হয়নি।
আবদুল আল হ্যাজেড

@ আব্দুলআলহ্যাজরেড আপনি ইনস্টল করেছেন gnuplotনাকি gnuplot-x11? পূর্বের, আফিক যদি স্ক্রিনে ইন্টারেক্টিভ প্লটগুলির চেয়ে সরাসরি ফাইল আউটপুট সরবরাহ করে (যেমন পিডিএফ, পিএনজি ইত্যাদি ফাইল তৈরি করে )।
স্টিল্ড্রাইভার

@ আবদুলআলহ্যাজার্ড: আপনি যদি কেবলমাত্র এটি করেন seq 100 >seq.dat, তবে gnuplotইন্টারেক্টিভ এবং প্রম্পট ধরণে চালান তবে কি হবে plot "seq.dat"?
নাট এল্ডারেজ

@ স্টিল্ড্রাইভার আমার Failed to initialize wxWidgets.gnuplot-x11 এর সাথে একটি ত্রুটি আছে ... আমার কি একটি বা অন্যটি থাকা দরকার? বা উভয় gnuplotএবং gnuplot-x11ইনস্টল করা যাবে?
3kstc

1
খুব সুন্দর; notitleশিরোনাম ছাড়া প্লট যোগ করুন ।
ভিক্টোরিয়া স্টুয়ার্ট

13

আমি এটি করতে হবে R। আপনাকে এটি ইনস্টল করতে হবে তবে এটি আপনার ডিস্ট্রিবিউশন সংগ্রহস্থলগুলিতে উপলব্ধ হবে। ডেবিয়ান-ভিত্তিক সিস্টেমগুলির জন্য, চালান

sudo apt-get install r-base

এটিও আনতে r-base-coreহবে তবে এটি যদি না sudo apt-get install r-base-coreহয় তবে চালাও। একবার Rইনস্টল হয়ে গেলে আপনি এর জন্য একটি সাধারণ আর স্ক্রিপ্ট লিখতে পারেন:

#!/usr/bin/env Rscript
args <- commandArgs(TRUE)
## Read the input data
a<-read.table(args[1])
## Set the output file name/type
pdf(file="output.pdf")
## Plot your data
plot(a$V2,a$V1,ylab="line number",xlab="value")
## Close the graphics device (write to the output file)
dev.off()

উপরের স্ক্রিপ্টটি একটি ফাইল তৈরি করবে output.pdf। আমি নিম্নলিখিত হিসাবে পরীক্ষা করেছি:

## Create a file with 100 random numbers and add line numbers (cat -n)
for i in {1..100}; do echo $RANDOM; done | cat -n > file 
## Run the R script
./foo.R file

আমি ব্যবহৃত এলোমেলো ডেটাতে, যা উত্পাদন করে:

এখানে চিত্র বর্ণনা লিখুন

আপনি কী চক্রান্ত করতে চান তা সম্পর্কে আমি পুরোপুরি নিশ্চিত নই তবে এটি কমপক্ষে আপনাকে সঠিক দিকে নির্দেশ করবে।


আমার রুপি স্ক্রিপ্ট v3.4.4 ggplot বা প্লট ব্যবহার না করেই ডিফল্টরূপে plots.pdf উত্পন্ন করে।
ভোরাক

@ ভোরাক আপনার কি অন্য উত্তরে মন্তব্য করার অর্থ ছিল? এর সাথে জিপিপ্লাটের কী সম্পর্ক আছে? এবং কেন ডিফল্ট আউটপুট ফাইলের নাম প্রাসঙ্গিক?
টেরডন

আমার ডেবিয়ান সিস্টেমে আপনার স্ক্রিপ্টের এই উপসেটটি #!/usr/bin/env Rscript; args <- commandArgs(TRUE); a<-read.table(args[1]); plot(a$V2,a$V1,ylab="line number",xlab="value");একই ডিরেক্টরিতে একটি Rplots.pdf উত্পন্ন করতে যথেষ্ট ।
ভোরাক

1
@ ভোরাক হ্যাঁ, অবশ্যই তবে আমি আউটপুট ফাইলের নামটি বেছে নিতে চাই। এবং, আরও গুরুত্বপূর্ণভাবে এটি কীভাবে করা যায় তা দেখান যাতে এটি স্ক্রিপ্ট করা যায়। অন্যথায়, আপনি যখনই কোনও আরএসক্রিপ্ট রান করবেন তখন এটি একই নাম ব্যবহার করবে এবং মূল্যবান রানের আউটপুটকে ওভাররাইট করবে।
টেরডন

11

এটি যদি হতে পারে যে খুব সাধারণ টার্মিনাল প্রিন্টআউট যথেষ্ট হয়েছে এবং আপনি উল্টানো অক্ষ দ্বারা সন্তুষ্ট হতে পারেন তবে নিম্নলিখিতটি বিবেচনা করুন:

seq 1000   |
grep -n 11 |
while IFS=: read -r n match
do  printf "%0$((n/10))s\n" "$match"
done

উপরের চার্টগুলি আউটপুটে 11 ধরণের প্রতিটি প্যাটার্নের জন্য 10% স্কেলে একটি উল্টানো ট্রেন্ড seq 1000

এটার মত:

11
        110
        111
        112
        113
        114
        115
        116
        117
        118
        119
                  211
                            311
                                      411
                                                511
                                                          611
                                                                    711
                                                                              811
                                                                                        911

বিন্দু এবং সংঘটন গণনা সহ এটি হতে পারে:

seq 1000    |
grep -n 11  | {
i=0
while IFS=: read -r n match
do    printf "%02d%0$((n/10))s\n" "$((i+=1))" .
done; }

... যা ছাপায় ...

01 .
02           .
03           .
04           .
05           .
06           .
07           .
08           .
09           .
10           .
11           .
12                     .
13                               .
14                                         .
15                                                   .
16                                                             .
17                                                                       .
18                                                                                 .
19                                                                                           .

আপনি আরও অনেক কাজ করে আপনার উদাহরণের মতো অক্ষগুলি পেতে পারেন এবং tput- প্রতিটি ঘটনার জন্য কার্সারটিকে একটি লাইন উপরে নিয়ে যাওয়ার জন্য আপনাকে \033[Aপালানো (বা এটির সমতুল্য আপনার টার্মিনাল এমুলেটরের সাথে সামঞ্জস্যপূর্ণ) করতে হবে।

তাহলে awkএর printfPOSIX-শেল মত সমর্থন স্পেস-প্যাডিং printfসম্ভবত অনেক বেশী দক্ষতার পাশাপাশি এবং - না, তাহলে আপনি এটি একই কাজ করতে ব্যবহার করতে পারেন। আমি তবে কীভাবে ব্যবহার করতে হয় তা জানি না awk


1

পিডিএফ আউটপুট আছে এবং প্লট লাইনগুলি আবশ্যক করে নেটের উত্তরকে বাড়ানো হচ্ছে (এর জন্য rsvg-convert):

| gnuplot -p -e 'set term svg; set output "|rsvg-convert -f pdf -o out.pdf /dev/stdin"; plot "/dev/stdin" with lines'

0

অথবা আপনি স্টাইডআউট ডেটা পাইপের মাধ্যমে একটি কাস্টম পাইথন স্ক্রিপ্টে পুনর্নির্দেশ করতে পারেন। এটি আপনাকে ডেটা পার্সিং, প্রাক-প্রসেসিং এবং ভিজ্যুয়ালাইজেশনে প্রচুর পরিমাণে কাস্টমাইজেশন এবং নমনীয়তার অনুমতি দেবে।

আপনার উদ্দেশ্য হিসাবে ঠিক তেমন করতে আমি এখানে লিখেছিলাম তার একটি টিউটোরিয়াল এখানে। লিংক

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.