python添加绘图区并共享X轴

汪圣毅-安徽医科大学第一附属医院

<p class="ql-block">转自CSDN的1篇文章</p> <p class="ql-block">from matplotlib.backends.backend_agg import FigureCanvasAgg</p><p class="ql-block">from matplotlib.figure import Figure</p><p class="ql-block">from matplotlib.axes import Axes</p><p class="ql-block">import numpy as np</p><p class="ql-block">from numpy import math</p><p class="ql-block">figa =Figure(figsize=(9.6,4.8), </p><p class="ql-block"> dpi=100,</p><p class="ql-block"> facecolor=(239/256,239/256,239/256),</p><p class="ql-block"> #facecolor=(0.18,0.31,0.31),</p><p class="ql-block"> edgecolor=(82/256,101/256,155/256),</p><p class="ql-block"> linewidth=10.0,</p><p class="ql-block"> )</p><p class="ql-block">canvas = FigureCanvasAgg(figa)</p><p class="ql-block"># 供rect参数调用add_axes()方法</p><p class="ql-block">#创建的axes会自动绑定到figure上</p><p class="ql-block">rect = [0.125,0.125,0.6,0.6]</p><p class="ql-block">axa = figa.add_axes(rect,facecolor='C2')</p><p class="ql-block">#读取figa.axes属性列表</p><p class="ql-block">print(figa.axes)</p><p class="ql-block">x = np.arange(0, 2*math.pi, 0.001)</p><p class="ql-block">y = np.sin(x)</p><p class="ql-block">axa.plot(x, y, color='m')</p><p class="ql-block">axa.grid(b=True)</p><p class="ql-block">#从figa中删除axa</p><p class="ql-block">figa.delaxes(axa)</p><p class="ql-block">#再次读取figa的axes列表,应该为空</p><p class="ql-block">print(figa.axes)</p><p class="ql-block">#使用一个参数调用add_axes()方法</p><p class="ql-block">#将axa再次添加到figa中</p><p class="ql-block">#可注释下一行,生成的图形中已没有axes</p><p class="ql-block">figa.add_axes(axa)</p><p class="ql-block">s, (width, height) = canvas.print_to_buffer() </p><p class="ql-block">from PIL import Image #调用PIL</p><p class="ql-block">im = Image.frombytes("RGBA", (width, height), s)</p><p class="ql-block">im.show() </p> <p class="ql-block">sharex, sharey</p> <p class="ql-block">from matplotlib.backends.backend_agg import FigureCanvasAgg</p><p class="ql-block">from matplotlib.figure import Figure</p><p class="ql-block">from matplotlib.axes import Axes</p><p class="ql-block">import numpy as np</p><p class="ql-block">from numpy import math</p><p class="ql-block">fig =Figure(figsize=(9.6,4.8), </p><p class="ql-block"> dpi=100,</p><p class="ql-block"> facecolor=(239/256,239/256,239/256),</p><p class="ql-block"> #facecolor=(0.18,0.31,0.31),</p><p class="ql-block"> edgecolor=(82/256,101/256,155/256),</p><p class="ql-block"> linewidth=10.0,</p><p class="ql-block"> )</p><p class="ql-block">canvas = FigureCanvasAgg(fig)</p><p class="ql-block">recta = [0.08,0.08,0.42,0.42]</p><p class="ql-block">axesa = fig.add_axes(recta,facecolor='C2')</p><p class="ql-block">rectb = [0.5,0.5,0.43,0.43]</p><p class="ql-block">#请注意有无sharex=axesa,axesb的x轴刻度的差异</p><p class="ql-block">#axesb = fig.add_axes(rectb)</p><p class="ql-block">axesb = fig.add_axes(rectb,sharex=axesa) #axesb与axesa的刻度相同</p><p class="ql-block">x = np.arange(0, 2*math.pi, 0.001)</p><p class="ql-block">y = np.sin(x)</p><p class="ql-block">axesa.plot(x, y, color='m')</p><p class="ql-block">s, (width, height) = canvas.print_to_buffer() </p><p class="ql-block">from PIL import Image </p><p class="ql-block">im = Image.frombytes("RGBA", (width, height), s)</p><p class="ql-block">im.show() </p> <p class="ql-block">添加axesb时,sharex = axesa</p>