Abrindo o gnuplot usando um arquivo de script bash e plotando um arquivo csv

-1

Eu sou novo no gnuplot e nos scripts e tenho problemas para plotar um arquivo csv.

Estou tentando fazer com que um usuário que tenha um arquivo csv tenha a capacidade de plotar colunas de sua escolha usando o gnuplot. Isso é o que eu tenho até agora:

echo "Welcome Let's get started"
echo "Lets get started with the data set"
echo "How many x-value data sets will be used in the plot?"
read totxvalues #For now we are starting with one data set
echo "What Column in the Data file will be the xvalue?"
read xcolumn
echo "What column in the Data set will be the yvalue?"
read ycolumn
echo "Name of xlabel"
read xlabel
echo "Name of ylabel"
read ylabel
echo "Name of Graph"
read graphTitle

for FILE in "example.csv"*; do
gnuplot
set datafile separator ","
set xlabel "xlabel"
set ylabel "ylabel"
set title "graphTitle"
plot "$FILE" using $($xcolumn):$($ycolumn)
EOF
done 

Atualmente, estou executando este script e ele chega ao ponto em que ele abre o gnuplot, mas não insere as variáveis que o usuário digitou.

Esta é a melhor abordagem para abrir o gnuplot e fazer com que as entradas do usuário sejam plotadas? Os dados que serão analisados terão muitas colunas de dados e é por isso que eu só quero escolher um casal de cada vez.

    
por Harliquin26 07.06.2018 / 21:44

1 resposta

4

A questão principal é um documento malformado aqui: ele precisa se parecer com

gnuplot << EOF
commands
EOF

Além disso, se você quiser que seus gráficos persistam na tela (usando o tipo de terminal padrão do gnuplot), então você provavelmente desejará adicionar a opção -p (persistent).

Eu não reconheço a sintaxe $($xcolumn):$($ycolumn) que você usou: Eu suspeito que isso seja apenas $xcolumn:$ycolumn

Por fim, suspeito que você provavelmente queira um shell glob mais parecido com *.csv than "example.csv"* .

Então:

for FILE in *.csv; do
gnuplot -p << EOF
set datafile separator ","
set xlabel "xlabel"
set ylabel "ylabel"
set title "graphTitle"
plot "$FILE" using $xcolumn:$ycolumn
EOF
done

Seu script também deve ter uma declaração adequada no início, por exemplo, #!/bin/bash ou #!/bin/sh

    
por steeldriver 07.06.2018 / 23:00