Python with matplotlib - reusing drawing functions

匿名 (未验证) 提交于 2019-12-03 08:36:05

问题:

I have a follow up question to this question.

Is it possible to streamline the figure generation by having multiple python scripts that work on different parts of the figure?

For example, if I have the following functions:

FunctionA: Draw a histogram of something
FunctionB: Draw a box with a text in it
FunctionC: Draw a plot of something C
FunctionD: Draw a plot of something D

How do I go about reusing the above functions in different scripts? If I wanted, for instance, to create a figure with a histogram with a plot of something C, I would somehow call FunctionA and FunctionC from my script. Or, if I wanted a figure with the two plots, I'd call FunctionC and FunctionD.

I'm not sure if I'm explaining myself clearly, but another way of asking this question is this: how do I pass a figure object to a function and then have the function draw something to the passed figure object and then return it back to the main script to add other things like the title or something?

回答1:

Here you want to use the Artist objects, and pass them as needed to the functions:

import numpy as np import matplotlib.pyplot as plt  def myhist(ax, color):     ax.hist(np.log(np.arange(1, 10, .1)), facecolor=color)  def say_something(ax, words):     t = ax.text(.2, 20., words)     make_a_dim_yellow_bbox(t)  def make_a_dim_yellow_bbox(txt):     txt.set_bbox(dict(facecolor='yellow', alpha=.2))  fig = plt.figure() ax0 = fig.add_subplot(1,2,1) ax1 = fig.add_subplot(1,2,2)  myhist(ax0, 'blue') myhist(ax1, 'green')  say_something(ax0, 'this is the blue plot') say_something(ax1, 'this is the green plot')  plt.show() 

alt text http://i28.tinypic.com/2i6f7f5.png



回答2:

Okey, I've figured out how to do this. It was a lot simpler than what I had imagined. It just required a bit of reading here with the figure and axes classes.

In your main script:

import pylab as plt   import DrawFns   fig = plt.figure()   (do something with fig)   DrawFns.WriteText(fig, 'Testing')   plt.show() 

In your DrawFns.py:

def WriteText(_fig, _text):   [indent]_fig.text(0, 0, _text) 

And that's it! And I can add more functions in DrawFns.py and call them from any script as long as they are included with import call. :D



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!