Настройки plt.*
обычно применяются к текущему графику matplotlib; с plt.subplot
вы начинаете новый график, поэтому настройки больше не применяются к нему. Вы можете обмениваться метками, отметками и т. д., пройдя через Axes
. объекты, связанные с графиками (см. примеры здесь), но ИМХО здесь было бы излишним. Вместо этого я бы предложил поместить общий «стиль» в одну функцию и вызвать ее для каждого сюжета:
def applyPlotStyle():
plt.xlabel('Size')
plt.ylabel('Time(s)');
plt.title('Matrix multiplication')
plt.xticks(range(100), rotation=30, size='small')
plt.grid(True)
plt.subplot(211)
applyPlotStyle()
plt.plot(xl, serial_full, 'r--')
plt.plot(xl, acc, 'bs')
plt.plot(xl, cublas, 'g^')
plt.subplot(212)
applyPlotStyle()
plt.yscale('log')
plt.plot(xl, serial_full, 'r--')
plt.plot(xl, acc, 'bs')
plt.plot(xl, cublas, 'g^')
Кстати, вы можете исключить дублирование, извлекая свои сюжетные команды в такую функцию:
def applyPlotStyle():
plt.xlabel('Size')
plt.ylabel('Time(s)');
plt.title('Matrix multiplication')
plt.xticks(range(100), rotation=30, size='small')
plt.grid(True)
def plotSeries():
applyPlotStyle()
plt.plot(xl, serial_full, 'r--')
plt.plot(xl, acc, 'bs')
plt.plot(xl, cublas, 'g^')
plt.subplot(211)
plotSeries()
plt.subplot(212)
plt.yscale('log')
plotSeries()
С другой стороны, может быть достаточно поместить заголовок вверху рисунка (а не над каждым графиком), например, используя suptitle
. Точно так же может быть достаточно, чтобы xlabel
отображался только под вторым графиком:
def applyPlotStyle():
plt.ylabel('Time(s)');
plt.xticks(range(100), rotation=30, size='small')
plt.grid(True)
def plotSeries():
applyPlotStyle()
plt.plot(xl, serial_full, 'r--')
plt.plot(xl, acc, 'bs')
plt.plot(xl, cublas, 'g^')
plt.suptitle('Matrix multiplication')
plt.subplot(211)
plotSeries()
plt.subplot(212)
plt.yscale('log')
plt.xlabel('Size')
plotSeries()
plt.show()
person
Hans
schedule
18.10.2012