1. <legend id='wvgRt'><style id='wvgRt'><dir id='wvgRt'><q id='wvgRt'></q></dir></style></legend>

      <i id='wvgRt'><tr id='wvgRt'><dt id='wvgRt'><q id='wvgRt'><span id='wvgRt'><b id='wvgRt'><form id='wvgRt'><ins id='wvgRt'></ins><ul id='wvgRt'></ul><sub id='wvgRt'></sub></form><legend id='wvgRt'></legend><bdo id='wvgRt'><pre id='wvgRt'><center id='wvgRt'></center></pre></bdo></b><th id='wvgRt'></th></span></q></dt></tr></i><div id='wvgRt'><tfoot id='wvgRt'></tfoot><dl id='wvgRt'><fieldset id='wvgRt'></fieldset></dl></div>

      <small id='wvgRt'></small><noframes id='wvgRt'>

      <tfoot id='wvgRt'></tfoot>
        <bdo id='wvgRt'></bdo><ul id='wvgRt'></ul>

        如何重用剧情艺术家(Line2D)?

        How can plot Artists be reused (Line2D)?(如何重用剧情艺术家(Line2D)?)

          <legend id='9bztB'><style id='9bztB'><dir id='9bztB'><q id='9bztB'></q></dir></style></legend>
          • <tfoot id='9bztB'></tfoot>
          • <small id='9bztB'></small><noframes id='9bztB'>

              <tbody id='9bztB'></tbody>
                <i id='9bztB'><tr id='9bztB'><dt id='9bztB'><q id='9bztB'><span id='9bztB'><b id='9bztB'><form id='9bztB'><ins id='9bztB'></ins><ul id='9bztB'></ul><sub id='9bztB'></sub></form><legend id='9bztB'></legend><bdo id='9bztB'><pre id='9bztB'><center id='9bztB'></center></pre></bdo></b><th id='9bztB'></th></span></q></dt></tr></i><div id='9bztB'><tfoot id='9bztB'></tfoot><dl id='9bztB'><fieldset id='9bztB'></fieldset></dl></div>

                • <bdo id='9bztB'></bdo><ul id='9bztB'></ul>
                  本文介绍了如何重用剧情艺术家(Line2D)?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  如何在后续绘图中重用.plot中的绘图线?

                  我想在4个轴上绘制曲线图,前3个单独绘制在每个轴上,最后3个绘制在最后一个轴上。 代码如下:

                  from numpy import *
                  from matplotlib.pyplot import *
                  fig=figure()
                  data=arange(0,10,0.01)
                  ax1=fig.add_subplot(2,2,1)
                  ax2=fig.add_subplot(2,2,2)
                  ax3=fig.add_subplot(2,2,3)
                  ax4=fig.add_subplot(2,2,4)
                  
                  line1=ax1.plot(data,data)
                  line2=ax2.plot(data, data**2/10, ls='--', color='green')
                  line3=ax3.plot(data, np.sin(data), color='red')
                  #could I somehow use previous plots, instead recreating them all?
                  line4=ax4.plot(data,data)
                  line4=ax4.plot(data, data**2/10, ls='--', color='green')
                  line4=ax4.plot(data, np.sin(data), color='red')
                  show()
                  

                  结果图片为:

                  有没有一种方法可以先定义曲线图,然后将它们添加到轴上,然后再绘制它们?以下是我心目中的逻辑:

                  #this is just an example, implementation can be different
                  line1=plot(data, data)
                  line2=plot(data, data**2/10, ls='--', color='green')
                  line3=plot(data, np.sin(data), color='red')
                  line4=[line1, line2, line3]
                  

                  现在在ax1上绘制line1,在ax2上绘制line2,在AX3上绘制line3,在ax4上绘制line4。

                  推荐答案

                  • OP中请求的实现不起作用,因为plt.plot返回的Line2DPlot Artist无法重用。尝试这样做,将按照def set_figure(self, fig):产生RuntimeError
                    • line1在OP中,line1与直接使用Line2D方法创建的line1不同,因为一个Plot Artist有不同的属性。
                    • 对于seabornmatplotlib接口,像seaborn.lineplot这样的轴级图返回一个axes
                      • p = sns.lineplot(...)然后p.get_children()获取Artist对象。
                  • 可以通过matplotlib.lines.Line2D等方法直接创建绘图艺术家,并在多个绘图中重复使用。
                  • 更新了代码,使用了标准导入做法、子图,而不是使用列表理解来获得副作用(Python反模式)。
                  • 测试于python 3.8.11matplotlib 3.4.3
                  import numpy as np
                  from copy import copy
                  import matplotlib.pyplot as plt
                  from matplotlib.lines import Line2D
                  
                  # crate the figure and subplots
                  fig, axes = plt.subplots(2, 2)
                  
                  # flatten axes into 1-D for easy indexing and iteration
                  axes = axes.ravel()
                  
                  # test data
                  data=np.arange(0, 10, 0.01)
                  
                  # create test lines
                  line1 = Line2D(data, data)
                  line2 = Line2D(data, data**2/10, ls='--', color='green')
                  line3 = Line2D(data, np.sin(data), color='red')
                  lines = [line1, line2, line3]
                  
                  # add the copies of the lines to the first 3 subplots
                  for ax, line in zip(axes[0:-1], lines):
                      ax.add_line(copy(line))
                  
                  # add 3 lines to the 4th subplot
                  for line in lines:
                      axes[3].add_line(line)
                      
                  # autoscale all the subplots if needed
                  for _a in axes:
                      _a.autoscale()
                  
                  plt.show()
                  

                  原始答案

                  • 这里有一个可能的解决方案。我不确定它是否很漂亮,但至少它不需要代码重复。
                  import numpy as np, copy
                  import matplotlib.pyplot as plt, matplotlib.lines as ml
                  
                  fig=plt.figure(1)
                  data=np.arange(0,10,0.01)
                  ax1=fig.add_subplot(2,2,1)
                  ax2=fig.add_subplot(2,2,2)
                  ax3=fig.add_subplot(2,2,3)
                  ax4=fig.add_subplot(2,2,4)
                  
                  #create the lines
                  line1=ml.Line2D(data,data)
                  line2=ml.Line2D(data,data**2/10,ls='--',color='green')
                  line3=ml.Line2D(data,np.sin(data),color='red')
                  #add the copies of the lines to the first 3 panels
                  ax1.add_line(copy.copy(line1))
                  ax2.add_line(copy.copy(line2))
                  ax3.add_line(copy.copy(line3))
                  
                  [ax4.add_line(_l) for _l in [line1,line2,line3]] # add 3 lines to the 4th panel
                  
                  [_a.autoscale() for _a in [ax1,ax2,ax3,ax4]] # autoscale if needed
                  plt.draw()
                  

                  这篇关于如何重用剧情艺术家(Line2D)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  groupby multiple coords along a single dimension in xarray(在xarray中按单个维度的多个坐标分组)
                  Group by and Sum in Pandas without losing columns(Pandas中的GROUP BY AND SUM不丢失列)
                  Group by + New Column + Grab value former row based on conditionals(GROUP BY+新列+基于条件的前一行抓取值)
                  Groupby and interpolate in Pandas(PANDA中的Groupby算法和插值算法)
                  Pandas - Group Rows based on a column and replace NaN with non-null values(PANAS-基于列对行进行分组,并将NaN替换为非空值)
                  Grouping pandas DataFrame by 10 minute intervals(按10分钟间隔对 pandas 数据帧进行分组)

                    <tfoot id='NMV94'></tfoot>
                  • <legend id='NMV94'><style id='NMV94'><dir id='NMV94'><q id='NMV94'></q></dir></style></legend>
                        <tbody id='NMV94'></tbody>

                          <bdo id='NMV94'></bdo><ul id='NMV94'></ul>
                          <i id='NMV94'><tr id='NMV94'><dt id='NMV94'><q id='NMV94'><span id='NMV94'><b id='NMV94'><form id='NMV94'><ins id='NMV94'></ins><ul id='NMV94'></ul><sub id='NMV94'></sub></form><legend id='NMV94'></legend><bdo id='NMV94'><pre id='NMV94'><center id='NMV94'></center></pre></bdo></b><th id='NMV94'></th></span></q></dt></tr></i><div id='NMV94'><tfoot id='NMV94'></tfoot><dl id='NMV94'><fieldset id='NMV94'></fieldset></dl></div>

                          1. <small id='NMV94'></small><noframes id='NMV94'>