Вы можете создать несколько фигурок с помощью matplotlib, используя подобные сюжеты
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=3, ncols=3)
Затем вы можете построить каждый столбец в отдельном сюжете с аргументом ax, используя ax = axes [nrow, ncol], чтобы указать участок, который вы хотите распечатать:
for i, column in enumerate(df.columns):
sns.distplot(df[column],ax=axes[i//3,i%3])
Другой возможный путь состоял бы в том, чтобы использовать API Win32 через что-то как w32api_register_function()
или ffi и затем используют вызовы последовательной передачи данных, чтобы заставить это работать в соответствии с Windows.
Другая опция состоит в том, чтобы использовать объект через ActiveX на окнах. Существуют несколько, главным образом коммерческие последовательные объекты для COM на окнах. Можно также выставить основанный на.NET объект и зарегистрироваться, он для COM использует также. Конечно, это действительно предполагает, что Вы имеете контроль на сервере для регистрации управления COM, поскольку Вам был бы нужен последовательный интерфейс.
Другой проблемой является конкуренция ресурса, если это для использования через сеть. Если бы это для последовательного принтера, например, то менеджер по очереди печати был бы Вашим наилучшим вариантом по прямой связи.
Самый легкий способ заняться этим состоял бы в том, чтобы записать программу в другом языке (таком как C++) и затем выполнить его из Вашего сценария PHP с system()
. Выполнение Коммуникации ввод-вывод в C++ тривиально.
Это предполагает, что у Вас есть достаточно доступа к серверу для конфигурирования его, чтобы позволить исполняемому файлу быть выполненным php и т.д.
Вам необходимо настроить com-порт с помощью команды, подобной DOS.
Например, следующая строка выполняет команду через php:
$output = `mode COM1: BAUD=115200 PARITY=N data=8 stop=1 XON=off TO=on`;
Для отображения результатов вы можете использовать :
echo "$output";
Создайте идентификатор ресурса:
$fp = fopen('COM1', 'r+');
if (!$fp)
{
echo "Port not accessible";
}
else
{
echo "Port COM1 opened successfully";
}
Запись в порт:
$writtenBytes = fputs($fp, "Hello");
echo"Bytes written to port: $writtenBytes";
Чтение из порта:
$buffer = fgets($fp);
echo "Read from buffer: $buffer";
Может быть, кто-нибудь поможет мне с проблемой fgets
. Он складывается ровно одну минуту, если TO = on
, или складывается навсегда, если TO = off
. Похоже, это вариант « MODE COM
», так что, возможно, эксперт по DOS сможет помочь.
Возможно, вместо fgets
следует использовать fgetc
, поскольку fgets
захватывает до новой строки
, а fgetc
захватывает одиночный символ. Если новая строка не встречается, он может блокироваться до тех пор, пока он не появится или пока буфер не будет очищен. Задержка в одну минуту может заключаться в том, что окна сбрасывают буфер в определенном интервале.