Я пытаюсь построить 3 подзаголовка без пробелов между ними. Пометка по оси y по умолчанию использует масштаб, отображаемый в верхнем правом углу оси y (1e-8 в приведенном ниже примере), что было бы неплохо, за исключением двух нижних графиков, которые перекрываются с приведенным выше графиком. Кто-нибудь знает, как это исправить? Ниже приведен небольшой пример.Matplotlib subplot y-scale scale overlaps with plot выше
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
from matplotlib.ticker import MaxNLocator
x = np.arange(0,200)
y = np.random.rand(200) * 10e-8
fig = plt.figure(figsize=(10,15))
gs1 = gridspec.GridSpec(3, 3)
gs1.update(left=0.1, right=0.9, bottom=0.5, hspace=0.0)
ax0a = plt.subplot(gs1[0, :])
ax0b = plt.subplot(gs1[1, :])
ax0c = plt.subplot(gs1[2, :])
ax0a.set_xticklabels([])
ax0b.set_xticklabels([])
ax0a.plot(x,y)
nbins = len(ax0a.get_xticklabels())
ax0a.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))
ax0b.plot(x,y)
ax0b.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))
ax0c.plot(x,y)
ax0c.yaxis.set_major_locator(MaxNLocator(nbins=nbins, prune='upper'))
так одно решение заключается в использовании mtick,
import matplotlib.ticker as mtick
ax0a.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))
ax0b.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))
ax0c.yaxis.set_major_formatter(mtick.FormatStrFormatter('%.1e'))
, но я бы предпочел, чтобы быть в состоянии сдвинуть шкалу влево, так что вне оси, если это возможно.
Не могли бы вы поделить ваши данные по '10e8', и просто переименуйте ярлыки xtick в' r '$ 10^x $' '? – GWW