Python 使用mathplotlib重叠多个绘图

Python 使用mathplotlib重叠多个绘图,python,matplotlib,Python,Matplotlib,我正在使用Django构建一个web应用程序,它可以选择绘制直方图、散点图、条形图等 使用matplotlib,我正在绘制绘图并将绘图呈现为HTML页面 plt.figure() plt.title("xyz") plt.tight_layout() plt.plot(x,y, 'b') plt.plot(x,z, 'r') buf = BytesIO() fig = plt.gcf() fig.set_size_inches(12,8, forward=Tru

我正在使用Django构建一个web应用程序,它可以选择绘制直方图、散点图、条形图等

使用matplotlib,我正在绘制绘图并将绘图呈现为HTML页面

plt.figure()
plt.title("xyz")
plt.tight_layout()
plt.plot(x,y, 'b')   
plt.plot(x,z, 'r')    
buf = BytesIO()
fig = plt.gcf()
fig.set_size_inches(12,8, forward=True)
fig.savefig(buf, format='png')
plt.clf()

# Get Image
image_base64 = base64.b64encode(
    buf.getvalue()).decode('utf-8').replace('\n', '')

img_src = 'data:image/png;base64, {}'.format(image_base64)

当用户发送两个不同的请求以绘制不同的绘图时,图例和数据点等内容与其他绘图混合,导致绘图重叠。在所附图像中,左侧的绘图应与右侧的绘图相似。但是不同绘图请求的内容会附加到此响应并显示在此响应中。

这是因为您正在同一个图上绘制两个图形。对于matplotlib,这意味着:“这是一个画布,请在上面绘制两个图形”

如果要拆分它们,请执行以下任一操作:

  • 使用两个单独的数字()
  • 在同一图形上使用2个子图()

    • 这是因为
      plt
      被多次恢复。像这样的事情应该会有帮助

      def simple(request):
          import random
          import django
          import datetime
      
          from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas
          from matplotlib.figure import Figure
          from matplotlib.dates import DateFormatter
      
          fig=Figure()
          ax=fig.add_subplot(111)
          x=[]
          y=[]
          now=datetime.datetime.now()
          delta=datetime.timedelta(days=1)
          for i in range(10):
              x.append(now)
              now+=delta
              y.append(random.randint(0, 1000))
          ax.plot_date(x, y, '-')
          ax.xaxis.set_major_formatter(DateFormatter('%Y-%m-%d'))
          fig.autofmt_xdate()
          canvas=FigureCanvas(fig)
          response=django.http.HttpResponse(content_type='image/png')
          canvas.print_png(response)
          return response
      

      我也有同样的问题,只是烧瓶有问题。简单插入
      plt.close(),在plt.save之后。问题已经解决。

      对不起,我在查询中没有明确说明,问题是如果我在一个请求中通过发送输入X、Y、Z请求条形图,在另一个请求中通过发送输入W、Y、Z请求散点图,条形图和散点图的内容混淆了。在条形图中显示散点图,并在散点图中显示条形图的内容。这只是演示如何在django中使用matplotlib。请根据需要自由定制。我可以绘制图像并将其呈现到HTML页面。但是,如果我在多种类型的绘图中有类似的实现,并且用户并行请求它们,则一个响应的内容与另一个响应的内容混合在一起,如查询中随附的图像所示。plt.save在哪里?