Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
182 views
in Technique[技术] by (71.8m points)

python - How does plt.show() know what to show?

My question is not about matplotlib in detail, but a general programming and question, and i'm looking for an answer on the mechanisms making this possible in python or matplotlib core.

Let's say I have a scatter plot using the code:

import matplotlib.pyplot as plt
plt.scatter(a,b)
plt.show()

I'm wondering how is this statement handled?
How does python (or matplotlib?) know what to plot and where to get the data?
How are these statement handled by interpreter?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

Maybe I finally see the point of this question. Of course we cannot explain pyplot here, because that is much too complicated and would require a complete tutorial (which btw do exist). But we can have a look at how pyplot would work as a module in a very simplified manner.

So let's create myplot, the ultimative console plotting library. ;-)

The module myplot could look as follows. It has two functions, scatter and show and two variables, figures and plot. plot would store our coordinate system to plot to. figures would store the figures we create.

plot = """
^            
|            
|            
|            
|            
|            
+----------->"""

figures =  []

def scatter(X,Y):
    thisplot = list(plot[:])

    for x,y in zip(X,Y):
        thisplot[1+14*(6-y)+x] = "*"
    thisplot = "".join(thisplot)

    figures.append(thisplot)

def show():
    for fig in figures:
        print(fig)

Calling scatter creates a new figure from plot and stores it in the figures list. Calling show takes all figures from that list, and shows them (prints them in the console).

So using myplot would look exactly like the example above.

import myplot as mlt

mlt.scatter([2,3,4,5,6,8],[2,5,4,4,3,2])

mlt.show() 

Creating the output:

^            
|  *         
|   **       
|     *      
| *     *    
|            
+----------->

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

57.0k users

...