Вам просто нужно вызывать функцию вашего графика в любое время с разными значениями.
Я полагаю, что ваши avg
и std
векторы имеют одинаковый размер, потому что они выводятся с той же функцией extract_statistics
. У вас может возникнуть проблема с вашим вектором x
. Возможно, размер этого вектора не соответствует размеру векторов avg
и std
.
В следующем решении мы имеем три пары векторов avg
и std
: 50, 200, 600. Мы объединяем 3 вектора в один вектор y
и e
. Итак, на каждой итерации следующего цикла for
мы используем один и тот же вектор x
для трех разных индексов из векторов y
и e
. Для этого мы предполагаем, что вектор x
и каждый элемент из y
и e
имеют одинаковый размер.
Когда мы называем что-то вроде y[:,0]
, например, мы нарезаем вектор y
и получение всех значений первого столбца этого вектора.
times_alg_1_sparse = times_alg1['Sparse']
avg_alg1_50_sparse, std_alg1_50_sparse = extract_statistics(times_alg_1_sparse.iloc[0])
avg_alg1_200_sparse, std_alg1_200_sparse = extract_statistics(times_alg_1_sparse.iloc[1])
avg_alg1_600_sparse, std_alg1_600_sparse = extract_statistics(times_alg_1_sparse.iloc[2])
x = np.array(times_alg_1_sparse.index)
y = np.array([avg_alg1_50_sparse*1000, avg_alg1_200_sparse*1000, avg_alg1_600_sparse*1000])
e = np.array([std_alg1_50_sparse*1000, std_alg1_200_sparse*1000, std_alg1_600_sparse*1000])
colors = ['red', 'green', 'blue']
for k in range(3):
plt.errorbar(x, y[:,k], e[:,k], mfc=colors[k], linestyle='solid', marker='^', color=colors[k])
plt.ylim(0)
plt.show()
Вы пытаетесь использовать subplots
. Что указано, если вы хотите построить на одном рисунке более одного графика.
Вы можете попытаться запустить дочерний процесс в новом потоке и вызвать process.WaitForExit()
после его запуска. Затем, после закрытия дочернего процесса, вы можете сфокусировать свое приложение, используя Dispatcher
, поскольку текущий поток не является потоком пользовательского интерфейса.
var process = Process.Start(@"C:\Windows\system32\mspaint.exe");
process.WaitForExit();
Dispatcher.Invoke(() => MainWindow.Current.MakeFocus()); // sample line
Ваше главное окно должно иметь статическое свойство Current
, и оно должно быть установлено при запуске вашего основного приложения.
Фокус является проблемой зрения.
Таким образом, прямой подход состоял бы в том, чтобы любая модель / служба, которую Process.Start
выполняла ваша служба, вызывала событие при выходе из процесса, позволяла виртуальной машине подобрать это и вызывать событие по очереди, и, наконец, иметь вид реагирует, устанавливая фокус.
В качестве альтернативы, виртуальная машина может установить свойство, скажем CurrentlyInExternalApplication
, которое при значении false вышеупомянутым событием вызовет срабатывание триггера (аналогичного существующему).