2

I'm currently trying to graph a sphere in a tkinter window using matplotlib. How do I go about making the display square? I'd like the sphere to have as little distortion as possible.

My code:

#!/usr/bin/env python
import matplotlib
matplotlib.use('TkAgg')

from mpl_toolkits.mplot3d import  axes3d,Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
import numpy as np
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.figure import Figure

import Tkinter
import sys

class ElectronOrbitalGenerator(Tkinter.Tk):
    def __init__(self,parent):
        Tkinter.Tk.__init__(self,parent)
        self.parent = parent


        self.protocol("WM_DELETE_WINDOW", self.dest)
        self.main()

    def main(self):
        self.fig = plt.figure()
        ax = Axes3D(self.fig)

        u = np.linspace(0, 2 * np.pi, 100)
        v = np.linspace(0, np.pi, 100)

        x = 10 * np.outer(np.cos(u), np.sin(v))
        y = 10 * np.outer(np.sin(u), np.sin(v))
        z = 10 * np.outer(np.ones(np.size(u)), np.cos(v))

        t = ax.plot_surface(x, y, z,  rstride=4, cstride=4, color='lightgreen',linewidth=0)

        self.frame = Tkinter.Frame(self)
        self.frame.pack(padx=15,pady=15)

        self.canvas = FigureCanvasTkAgg(self.fig, master=self.frame)

        self.canvas.get_tk_widget().pack(side='top', fill='both', expand=1)


        self.canvas._tkcanvas.pack(side='top', fill='both', expand=1)

        self.btn = Tkinter.Button(self,text='button',command=self.alt)
        self.btn.pack()

    def alt (self):
        print 9
    def dest(self):
        self.destroy()
        sys.exit()



if __name__ == "__main__":
    app = ElectronOrbitalGenerator(None)
    app.title('Embedding in TK')
    app.mainloop()

EDIT

I tried

    self.fig.set_figwidth(100.0)
    self.fig.set_figheigth(100.0)

and got this

AttributeError: 'Figure' object has no attribute 'set_figheigth'
1
  • I had a typo, it is:set_figheight Commented Oct 3, 2010 at 20:19

2 Answers 2

3

You can make use of pyplot.figure()'s figsize paramater to set the figure size.

e.g.

self.fig = plt.figure(figsize=(5,5))

Sign up to request clarification or add additional context in comments.

Comments

1

Did you try to set the figure size attributes? fig.set_figwidth and fig.set_figheigh t

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.