Это один из способов сделать это, используя groupby
для формирования групп на основе Town
, а затем нанести на график price
и sales
, используя вторичную ось у
fig, ax = plt.subplots(figsize=(8, 6))
df_group = data.groupby('Town')['week','price','sales']
ylabels = ['price', 'sales']
colors =['r', 'g', 'b']
for i, key in enumerate(df_group.groups.keys()):
df_group.get_group(key).plot('week', 'price', color=colors[i], ax=ax, label=key)
df_group.get_group(key).plot('week', 'sales', color=colors[i], linestyle='--', secondary_y=True, ax=ax)
handles,labels = ax.get_legend_handles_labels()
legends = ax.legend()
legends.remove()
plt.legend(handles, labels)
ax1.set_ylabel('Price')
ax2.set_ylabel('Sales')
Хм, от ответа Jon Skeet до этого вопроса:
Синхронизируя строку кода точно в потоковом приложении, C#
И также эта статья:
Кажется, что нет никакого простого способа сделать это.
Секундомер должен измерить время, проведенное только в одном потоке. Необходимо было бы выполнить отдельный экземпляр на каждом потоке. Это дало бы Вам, вероятно, результаты завершений к тому, что Вы хотите.
Кроме того (предпочтительный вариант, если Вы хотите контролировать целое приложение и не только некоторые методы), существуют различные счетчики производительности, которые можно использовать из поля (они обновляются временем выполнения .NET). Существует большая информация о сети, можно запустить с MSDN: http://msdn.microsoft.com/en-us/library/w8f5kw2e (По сравнению с 71) .aspx
Я когда-то решил подобную проблему путем создания обертки для StopWatch, которому отметили экземпляр StopWatch как ThreadStatic
.
Кроме того, существуют инструменты, такие как Профилировщик Муравьев, которого можно купить для помощи Вам.
That's a cool tool: http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx