Como plotar gráfico a partir de um arquivo de texto usando o gnuplot?

10

Como plotar um gráfico a partir dos valores do arquivo de texto? O arquivo de texto se parece abaixo:

location  count1    count2
HZ        100        193
ES        514        289
FP        70         137
BH        31         187

Eu quero plotar esses valores como um gráfico no shell script. Nos valores do eixo x da coluna de localização e nos valores do eixo y da coluna count1 e count2.

manu
fonte
O óbvio plot "/tmp/temp.txt"falha com Bad data on line 1 of file /tmp/temp.txt. Eu acho que você pode apenas ter que criar uma versão do arquivo com apenas números, sem cabeçalhos de linha / coluna. Como alternativa, use algo como numérico.
barrycarter

Respostas:

9

Usando o mesmo arquivo de entrada (ex.tsv) e criando um script gnuplot para controlar melhor os detalhes

set style data histogram 
set style fill solid border -1
plot for [i=2:3] '/dev/stdin' using i:xtic(1) title col 

e gnuploting os dados:

gnuplot -p ex.gnu < ex.tsv

nós vemos o histograma correspondente.

Para criar um arquivo png (para carregar e mostrar no SO), adicione mais 2 linhas:

set terminal pngcairo enhanced font "arial,10" fontscale 1.0 size 600, 400 
set output 'out.png'
set style data histogram 
set style fill solid border -1
plot for [i=2:3] '/dev/stdin' using i:xtic(1) title col

insira a descrição da imagem aqui

JJoao
fonte
7

Solução de trabalho para o gnuplot v5.0:

Arquivo de dados de entrada loc.dat:

location  count1    count2
HZ        100        193
ES        514        289
FP        70         137
BH        31         187

Script gnuplotlocations.plt :

#!/usr/bin/gnuplot -persist

set title "Location data"
set xlabel "location"
set ylabel "count"
set grid
plot "loc.dat" u (column(0)):2:xtic(1) w l title "","loc.dat" u (column(0)):3:xtic(1) w l title ""

  • set title "Location data" - título da trama principal

  • set xlabel "location"- etiqueta de configuração para o xeixo

  • set ylabel "count"- etiqueta de configuração para o yeixo

  • set grid - adicionando grade ao gráfico

  • (column(0)):2:xtic(1)- intervalo de colunas, (column(0))- como a 1ª coluna no arquivo de entrada possui valores não numéricos, precisamos imitar a 1ª coluna numérica, pois o gnuplot espera apenas valores numéricos

  • w l- significa com linhas , para unir todos os pontos de dados com linhas


Lançamento interativo:

$ gnuplot
gnuplot> load "locations.plt"

Resultado renderizado:

insira a descrição da imagem aqui

RomanPerekhrest
fonte
Só quero mencionar, observe as aspas em torno de locations.plt no comando gnuplot> load "locations.plt", o gnuplot exige que, load locations.pltnão funcione e você receberá "erro interno: operador STRING aplicado a variável indefinida ou não STRING" se você esquecer.
JRH