Gnuplot: как я могу прочитать одну текстовую строку из файла данных? - PullRequest
2 голосов
/ 05 июня 2019

Я занят системой генерирования некоторых графиков из большого файла данных в формате csv.

До сих пор я мог выполнять эту задачу с помощью gnuplot, но мне также нравится читать некоторые текстовые строки изфайл данных, чтобы немного адаптировать и использовать их для маркировки и / или других текстовых полей на графиках.До сих пор я не мог сделать это в системе команд gnuplot.

Дополнительное требование : должен быть в состоянии запустить код в Windows.

Этомой код до сих пор:

# The BigDataFile.csv files starts with some lines information
# (string texts about the matrix contense). After this info block,
# all the matrix data for  the plots.

dataFileName="BigDataFile.csv"

set datafile separator "\t"     

# Read one text string at line number 'textInfoRow' from column
# number 'textInfoColumn'

textInfoRow = 5

textInfoColumn = 10

# Now try to capture the string at some location in the info block. 

set terminal unknown 

plot dataFileName every ::textRow::textRow using (textVar=stringcolumn(textColumn))  # How can we do this ????

print textVar 

Вопрос : Как мы можем прочитать в 'gnuplot' единственную текстовую строку в указанном месте в файле данных?

1 Ответ

1 голос
/ 05 июня 2019

Проблемы с вашим кодом:

  1. ваши переменные textInfoRow и textInfoColumn и более поздние textRow и textColumn.
  2. gnuplot не нравитсядля построения строк, даже если для терминала установлено значение unknown.Просто измените свое выражение на (textVar=stringcolumn(textInfoColumn),0).Он присваивает значение переменной, но чертит 0.Проверьте help operators binary.Выражение (a,b) является последовательной оценкой.

Также имейте в виду, что gnuplot начинает считать строки с 0.

Data: "BigDataFile.csv" (убедитесь, что разделителями являются TAB, StackOverflow преобразовал ихв пространство)

# "Big" data with some header
# another header line
1.000   2.000   3.000   4.000   5.000   6.000   7.000   8.000   9.000   10.00
2.000   0.982   0.755   0.526   0.684   0.090   0.221   0.402   0.594   0.331
3.000   0.119   0.904   0.938   0.960   0.067   0.607   0.368   0.540   0.317
4.000   0.782   0.060   0.163   0.446   0.826   0.503   0.096   0.494   0.949
5.000   0.930   0.703   0.294   0.990   0.919   0.038   0.550   0.467   HERE
6.000   0.346   0.830   0.920   0.285   0.575   0.878   0.747   0.532   0.222
7.000   0.207   0.120   0.709   0.194   0.854   0.501   0.241   0.505   0.123
8.000   0.862   0.479   0.531   0.640   0.259   0.673   0.708   0.559   0.516
9.000   0.979   0.581   0.611   0.664   0.369   0.775   0.808   0.522   0.294
10.00   0.514   0.516   0.780   0.232   0.407   0.718   0.140   0.568   0.619

Вы можете извлечь текстовую ячейку с помощью следующего кода.Я не уверен, является ли это самым быстрым и наиболее эффективным способом, но, по крайней мере, он только для gnuplot и, следовательно, не зависит от платформы и должен бесперебойно работать в Linux, MacOS и Windows.

Код:

### extract one "cell" of data
reset session

dataFileName="BigDataFile.csv"

set datafile separator "\t"     
textInfoRow = 5
textInfoColumn = 10

set terminal unknown 
plot dataFileName every ::textInfoRow-1::textInfoRow-1 using (textVar=stringcolumn(textInfoColumn),0) 

print textVar 
### end of code

Результат:

HERE

...