0

I have a python script that produces a plot, and I run it on a remote machine. The panels and font in the plot are perfectly proportioned, and look as I want them to.

I have recently run the unchanged code on a different remote machine, and the plot comes out having a different aspect ratio.

I had attached the example plots below. The top one looks as I want it. Everything is the same in the one below, and yet, somehow, it is actually landscape now instead of portrait. I have tried switching figsize=(18.5*0.8, 18.5) to figsize=(18.5, 18.5*0.8), but that just made it worse.

The plots were created with matplotlib.gridspec.

Could someone please explain why this is? I guess it must be something to do with the settings of the different remote machines.

Is it possible for me to avoid or undo the changes that occur?


MWE:

import argparse
import pylab as pb
pb.ion()
import numpy as np
import GPy
import math
import matplotlib
import matplotlib.pyplot as plt
import scipy as sc
from scipy import stats
import scipy.signal as ss
import sys
import Vfunctions as Vf
import os
from os.path import basename
import matplotlib as mpl
mpl.rcParams['axes.formatter.useoffset'] = False
mpl.rc('xtick', labelsize=20)
mpl.rc('ytick', labelsize=20)
import matplotlib.gridspec as gridspec

x_values = range(50)
y_values = np.sin(x_values)

print y_values

fig = plt.figure(figsize=(18.5*0.8, 18.5))

outer = gridspec.GridSpec(2, 1, height_ratios = [3,2])

gs1 = gridspec.GridSpecFromSubplotSpec(3, 1, subplot_spec = outer[0], hspace = .04)
ax1 = plt.subplot(gs1[0])
plt.plot(x_values,y_values,'k.')
ax1.set_xlim([0-1, 50])

xlabs = [0,100,200,300,400,500,600,700]
xlocs = [0/15.,100/15.,200/15.,300/15.,400/15.,500/15.,600/15.,700/15.]
ax1.set_xticks(xlocs)
ax1.set_xticklabels(xlabs)

plt.grid()

plt.tick_params(
    axis='x',          # changes apply to the x-axis                                                                                                                                                                                                                                                                   
    which='both',      # both major and minor ticks are affected                                                                                                                                                                                                                                                       
    bottom=False,      # ticks along the bottom edge are off                                                                                                                                                                                                                                                           
    top=False,         # ticks along the top edge are off                                                                                                                                                                                                                                                              
    labelbottom=False) # labels along the bottom edge are off                                                                                                                                                                                                                                                          

ax2 = plt.subplot(gs1[1])
ax2.errorbar(x_values, y_values, yerr=0.0001,fmt='k.')
plt.plot(x_values, y_values, 'k-')
plt.grid()


plt.tick_params(
    axis='x',          # changes apply to the x-axis                                                                                                                                                                                                                                                                   
    which='both',      # both major and minor ticks are affected                                                                                                                                                                                                                                                       
    bottom=False,      # ticks along the bottom edge are off                                                                                                                                                                                                                                                           
    top=False,         # ticks along the top edge are off                                                                                                                                                                                                                                                              
    labelbottom=False) # labels along the bottom edge are off                                                                                                                                                                                                                                                          


ax3 = plt.subplot(gs1[2])
plt.errorbar(x_values, y_values, yerr=0.0001,fmt='k.')
plt.grid()

gs2 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = outer[1], hspace = .5)
ax4 = plt.subplot(gs2[0])
plt.plot(x_values,y_values,'k.')
plt.grid()

fig.text(0.03,0.87,'Label 1',rotation='vertical', horizontalalignment='center', verticalalignment='center', size=26)
fig.text(0.03,0.7,'Label 2',rotation='vertical',horizontalalignment='center', verticalalignment='center',size=26)
fig.text(0.03,0.54,'Label 3',rotation='vertical',horizontalalignment='center', verticalalignment='center',size=26)
fig.text(0.03,0.24,'Label 4',rotation='vertical',horizontalalignment='center', verticalalignment='center',size=26)
fig.text(0.535,0.03,'Label 5',horizontalalignment='center', verticalalignment='center',size=26)
fig.text(0.535,0.415,'Label 6',horizontalalignment='center', verticalalignment='center',size=26)
fig.text(0.18,0.35,'Label 7',size=26)

plt.tight_layout(pad=6.0)

plt.savefig('plot.png')
plt.clf()

Code run on remote machine 1 Code run on remote machine 2


PIP FREEZE ON MACHINE WITH GOOD PLOT:

Brlapi==0.5.6
-e git+https://github.com/SheffieldML/GPy.git@775ce9e64c1e8f472083b8f2430134047d97b2fa#egg=GPy-dev
GnuPGInterface==0.3.2
Jinja2==2.6
Mako==0.5.0
MarkupSafe==0.15
MySQL-python==1.2.3
PAM==0.4.2
PIL==1.1.7
PRESTO==0.99
PyYAML==4.2b4
Pygments==1.4
Sphinx==1.1.3
Twisted-Core==11.1.0
Twisted-Names==11.1.0
Twisted-Web==11.1.0
adium-theme-ubuntu==0.3.2
apt-xapian-index==0.44
apturl==0.5.1ubuntu3
argparse==1.2.1
astropy==0.4.2
backports.ssl-match-hostname==3.4.0.2
certifi==14.05.14
chardet==2.0.1
command-not-found==0.2.44
configglue==1.0
configobj==4.7.2
cosmocalc==0.1.2
debtagshw==0.1
decorator==3.3.2
defer==1.0.2
dirspec==3.0.0
distribute==0.7.3
docutils==0.8.1
duplicity==0.6.18
emcee==3.0rc1
epydoc==3.0.1
h5py==2.6.0
httplib2==0.7.2
iotop==0.4.4
ipython==2.1.0
jockey==0.9.7
jsonschema==2.4.0
keyring==0.9.2
language-selector==0.1
launchpadlib==1.9.12
lazr.restfulclient==0.12.0
lazr.uri==1.0.3
lmfit==0.8.3
lockfile==0.8
logilab-astng==0.23.0
logilab-common==0.57.1
louis==2.3.0
lxml==2.3.2
matplotlib==1.4.2
mercurial==2.0.2
mock==1.0.1
nose==1.3.4
numexpr==1.4.2
numpy==1.9.1
nvidia-common==0.0.0
oauth==1.0.1
onboard==0.97.1
oneconf==0.2.8.1
pandas==0.16.2
pep8==0.6.1
pexpect==2.3
piston-mini-client==0.7.2
protobuf==2.4.1
psutil==2.1.3
pyOpenSSL==0.12
pybind11==2.2.3
pycrypto==2.4.1
pycups==1.9.61
pycurl==7.19.0
pyephem==3.7.5.1
pyfits==3.3
pyflakes==0.5.0
pygame==1.9.1release
pyinotify==0.9.2
pylint==0.25.0
pymc==2.3.4
pymix==0.8a
pyparsing==2.0.3
pyserial==2.5
pysmbc==1.0.13
pysqlite==1.0.1
python-apt==0.8.3ubuntu7.3
python-dateutil==1.5
python-debian==0.1.21ubuntu1
python-virtkey==0.60.0
pytz==2014.9
pyxdg==0.19
pyzmq==2.1.11
reportlab==2.5
rhythmbox-ubuntuone==4.2.0
rope==0.9.2
rpy==1.0.3
scikits.statsmodels==0.3.1
scipy==0.16.0
sessioninstaller==0.0.0
simplegeneric==0.7
simplejson==2.3.2
six==1.8.0
software-center-aptd-plugins==0.0.0
spyder==2.1.9
sympy==0.7.1.rc1
system-service==0.1.6
tables==2.3.1
tornado==4.1b2
traits==4.0.0
ubuntuone-couch==0.3.0
ubuntuone-installer==3.0.2
ubuntuone-storage-protocol==3.0.2
ufw==0.31.1-1
unattended-upgrades==0.1
unity-lens-video==0.3.5
unity-scope-video-remote==0.3.5
urlgrabber==3.9.1
usb-creator==0.2.23
virtualenv==15.0.2
wadllib==1.3.0
wsgiref==0.1.2
wxPython==2.8.12.1
wxPython-common==2.8.12.1
xdiagnose==2.5.3
xkit==0.0.0
xlrd==0.6.1
xlwt==0.7.2
yum-metadata-parser==1.1.2
zope.interface==3.6.1

PIP FREEZE ON MACHINE WITH BAD PLOT:

acor==1.1.1
alabaster==0.7.10
algopy==0.5.5
apipkg==1.4
appdirs==1.4.3
asn1crypto==0.24.0
asteval==0.9.12
astropy==2.0.1
astropy-helpers==2.0.6
Babel==2.5.1
backports-abc==0.5
backports.shutil-get-terminal-size==1.0.0
backports.ssl-match-hostname==3.5.0.1
bleach==2.0.0
certifi==2017.7.27.1
cffi==1.11.5
chardet==3.0.4
configparser==3.5.0
corner==2.0.1
coverage==4.5.1
coveralls==1.3.0
cryptography==2.2.2
cvxopt==1.1.9
cycler==0.10.0
Cython==0.26
decorator==4.1.2
docopt==0.6.2
docutils==0.14
emcee==2.2.1
enterprise==1.2.0
enterprise-extensions==0.0.0
entrypoints==0.2.3
enum34==1.1.6
ephem==3.7.6.0
execnet==1.4.1
funcsigs==1.0.2
functools32==3.2.3.post2
future==0.16.0
george==0.3.1
gnureadline==6.3.3
GPy==1.8.4
h5py==2.7.0
healpy==1.11.0
html5lib==0.999999999
idna==2.6
imagesize==0.7.1
ipaddress==1.0.19
ipykernel==4.6.1
ipython==5.4.1
ipython-genutils==0.2.0
ipywidgets==6.0.0
Jinja2==2.9.6
jplephem==2.7
jsonschema==2.6.0
jupyter==1.0.0
jupyter-client==5.1.0
jupyter-console==5.1.0
jupyter-core==4.3.0
libstempo==2.3.5
line-profiler==2.1.2
llvmlite==0.23.0
lmfit==0.9.11+4.g474ee30
magickwand==0.2
MarkupSafe==1.0
matplotlib==2.0.2
memory-profiler==0.52.0
mistune==0.7.4
mock==2.0.0
mpi4py==3.0.0
nanopipe==0.0
nbconvert==5.2.1
nbformat==4.3.0
nose==1.3.7
notebook==5.0.0
numba==0.38.0
numdifftools==0.9.20
numexpr==2.6.2
numpy==1.13.3
PAL2==2015.4
pandas==0.20.3
pandocfilters==1.4.2
paramz==0.8.5
pathlib2==2.3.0
patsy==0.4.1
pbr==3.1.1
pexpect==4.2.1
piccard==2016.1
pickleshare==0.7.4
Pillow==5.1.0
pint==0.5.3
pkginfo==1.4.1
PRESTO==0.99
prompt-toolkit==1.0.15
psutil==5.4.3
PTMCMCSampler==2015.2
ptyprocess==0.5.2
py==1.4.34
pybind11==2.2.3
pycparser==2.18
pyephem==3.7.6.0
pyfits==3.4
Pygments==2.2.0
pygsm==2.0.0
pymultinest==2.2
pyOpenSSL==17.5.0
pyparsing==2.2.0
pytest==3.2.1
pytest-forked==0.2
pytest-timeout==1.2.0
pytest-xdist==1.20.0
python-dateutil==2.6.1
pytz==2017.2
PyYAML==3.13
pyzmq==16.0.2
qtconsole==4.3.0
requests==2.18.4
requests-toolbelt==0.8.0
runipy==0.1.5
scandir==1.5
scikit-learn==0.19.1
scikit-sparse==0.4.3
scipy==1.0.0
simplegeneric==0.8.1
singledispatch==3.4.0.3
six==1.11.0
snowballstemmer==1.2.1
sparklines==0.4.1
Sphinx==1.6.3
sphinx-rtd-theme==0.2.4
sphinxcontrib-websupport==1.0.1
statsmodels==0.8.0
subprocess32==3.2.7
terminado==0.6
testpath==0.3.1
torch==0.4.0
torchvision==0.2.1
tornado==4.5.1
tqdm==4.17.1
traitlets==4.3.2
twine==1.9.1
typing==3.6.2
uncertainties==3.0.2
urllib3==1.22
utils==0.9.0
Wand==0.4.4
wcwidth==0.1.7
webencodings==0.5.1
widgetsnbextension==2.0.0
wxPython==4.0.0rc1
user1551817
  • 6,693
  • 22
  • 72
  • 109
  • 2
    You might want to add some more tags, for example Python, and explain how you did the plots. There isn’t just one way to do it in Python so a [mcve] would go a long way – Sami Kuhmonen Sep 12 '18 at 12:04
  • I have edited the tags and added that the plot was created using matplotlib.gridspec. Will work on a MWE now. Thanks. – user1551817 Sep 12 '18 at 12:10
  • 1
    What is you specify the figure size beforehand. Try it out using `fig=plt.figure(figsize=(10,6))` – Sheldore Sep 12 '18 at 13:06
  • I've added some code to my question now. I use: fig = plt.figure(figsize=(18.5*0.8, 18.5)), i.e. 14.8 and 18.5. – user1551817 Sep 12 '18 at 13:10
  • 1
    Most likely not the same versions of the python libraries. – user2653663 Sep 12 '18 at 14:05
  • 1
    You may want to compare a `pip freeze` local to a `pip freeze` on your remote machine, ensure requirements match. You may also want to reference the response provided here if you are a MacOS user: https://stackoverflow.com/questions/3453188/matplotlib-display-plot-on-a-remote-machine – Michael B Sep 12 '18 at 14:16
  • They are both remote machines. For sure there will be many differences in the architecture. I will post above. – user1551817 Sep 12 '18 at 14:19
  • @user1551817 Are you sure you get the second figure with exactly **the same code you posted** in the second machine? – Stop harming Monica Sep 15 '18 at 18:56

0 Answers0