Я получил код Python, который выглядит примерно так
import subprocess
outdata = """0 45
1 35
2 45
3 35
4 45
5 35
6 45
7 35
8 45""" # etc... one for every minute of a day
f = open("data.txt", 'w')
f.write(outdata)
f.close()
filename = "graph"title = "today"plottext = """set terminal svg size 2560,1440 enhanced font 'Arial,40'
set output '""" + filename + """.svg'
set title '""" + title + """'
set xrange [0:1440]
set yrange [0:]
set xtics ("00" 0, "01" 60, "02" 120, "03" 180, "04" 240, "05" 300, "06" 360, "07" 420, "08" 480, "09" 540, "10" 600, "11" 660, "12" 720, "13" 780, "14" 840, "15" 900, "16" 960, "17" 1020, "18" 1080, "19" 1140, "20" 1200, "21" 1260, "22" 1320, "23" 1380, "24" 1440 )
plot 'data.txt' using 1:2 with lines notitle
"""f = open("plotfile.plt", 'w')
f.write(plottext)
f.close()
p = subprocess.call(["gnuplot", "plotfile.plt"])
Который работает как шарм. Но как мне создать граф с помощью gnuplot из Python (или языка) без использования временных файлов data.txt и plotfile.plt?
Это делается 30+ раз в минуту каждую минуту, каждый час, почти год, поэтому пропуск временных файлов сэкономит дисковое время, поскольку обрабатывается не небольшое количество данных.
Дополнительный вопрос, можно ли пропустить выходной файл и записать xml для svg-файла в переменную? Это будет происходить в CGI-BIN, поэтому я хочу иметь возможность называть это так:
<img src="http://www.example.com/cgi-bin/plot.py?table=table1&date=2016-12-07">
Изменить: модуль Python для gnuplot не доступен для меня.
Edit2: еще один пример в PHP, который почти делает то, что я хочу, это
$outdata="0 33
1 44
2 55
3 44
4 33
5 44
6 55";
$plottext = "set terminal svg size 2560,1440 enhanced font 'Arial,40'
set term svg size 2560,1440 enhanced font 'Arial,40'
set title ''
set xrange [0:1440]
set yrange [0:]
set xtics ('00' 0, '01' 60, '02' 120, '03' 180, '04' 240, '05' 300, '06' 360, '07' 420, '08' 480, '09' 540, '10' 600, '11' 660, '12' 720, '13' 780, '14' 840, '15' 900, '16' 960, '17' 1020, '18' 1080, '19' 1140, '20' 1200, '21' 1260, '22' 1320, '23' 1380, '24' 1440)
plot '-' using 1:2 with lines notitle\n". $outdata;
file_put_contents("plotfile.plt", $plottext);
exec("gnuplot plotfile.plt", $out);
foreach($out as $line)
{
print $line."\n";
}
Я хотел бы назвать его с помощью чего-то вроде exec («gnuplot $ plottext», $ out); поэтому я могу пропустить файл plotfile.plt, потому что, если два человека попытаются получить доступ к графу на графике одновременно, эта установка может испортить его, потому что все используют plotfile.plt, что не является лучшим решением. Мы могли бы использовать длинное случайное имя для каждого http-запроса, но отследить такое количество временных файлов и стереть их не элегантно.
Задача ещё не решена.
Других решений пока нет …