Using python and matplotlib on android

Each Answer to this Q is separated by one/two green lines.

Is there a way to set up python 2.7.x + matplotlib on an android tablet so that you can run simple standard python code? I would like to be able to run the same scripts I run on my Linux desktop. This is just for my own use and I don’t need to distribute the code to anyone else.

As a concrete example, is it possible to run this script?

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.1);
y = np.sin(x)
plt.plot(x, y)

Is it easy, no.

Can it be done? Yes. I believe a skilled Python / Android developer could do it in 2 to 8 hours of effort.. It’s a rare and complex request.

Why do I think it can be done? This sample: http://matplotlib.org/examples/pylab_examples/webapp_demo.html

Using a different library, and not abstracted for data without live hardware, this sample shows me that SL4A can do web-based graphics:
http://www.smartphonedaq.com/android-python-ecg.page

Now, if you were talking native GUI graphics in Android – then I’m focused way too much on the web methods of publishing with SL4A 😉

Pydroid is great for Matplotlib on Android, supports Numpy and many other libraries:

Pydroid for Python 2.7

Pydroid 3 for Python 3.6

There is an app called Gnuroot that allows you to run a kind-of chroot (proot), where you can install a linux distro such as debian, archlinux…
For the gui, there is the option to run a vncserver for an X server and use some android vnc client app to show the screen.

I use the non-gui version of gnuroot and it works well. I now have a command line debian wheezy on android lollipop arm. One minor thing i miss, is armhf (hardware floating point which my nexus7’s processor can do) support instead of armel (software floating point).

Yes, it can be done, even without root. You need the termux app, it basically is a terminal emulator with a full Linux environment and via apt install python, for example, you can install python.

The main webpage is here, and it is of course available via the standard market. (The termux wiki is a helpful place.)

Upon searching numpy android on Google, I found a very nice library. I guess it might be helpful.

The above link no longer works. Please find more information regarding the library here.

ever heard of qpython?
http://qpython.com/
i personally never used it, but my colleague were quite handy with it
so you may want to look at that

I’ve read somewhere that scipy and matplotlib cannot be compiled for android, someone did it for numpy though

https://code.google.com/p/android-scripting/issues/detail?id=260

You could set up a cheap server (Raspberry Pi?) and create an ssh connection to it to access full python functionality through a vnc viewer android app or the shell

You can try MathSys. It’s a wrapper around Python, and it has matplotlib inside.

Unfortunately, MathSys is rather convoluted, and it’s an alpha version. Apparently, nobody is working on a beta version. You’ll want to write any complicated code in an external file. import works fine in MathSys.

Here is the code, this works after installing GNURoot Debian as you said. Just a detail : my graph is exported directly in a .png file :

from pylab import *
import matplotlib.pyplot as plt
plt.switch_backend('agg')
x = linspace(-5, 5, 100)
y = sin(x)
plot(x, y)
out_png = 'out_file.png'
plt.savefig(out_png, dpi=150)

There is a lot of incorrect information in this thread! I first tried Termux, using the information from this thread:
How do I install Jupyter notebook on an Android device?
but could not get Matplotlib downloaded for the life of me. The error messages suggested I needed to install wheel, which I did, but the install crash was only postponed. I am not saying it is not possible to install Matplotlib from Termux on a Galaxy Tab A, but I cannot do it.
On the other hand, downloading Pyroid3 was straightforward, as was installing numpy, scipy and matplotlib. So that’s my recommendation, based on success in doing so.

I just got this running for myself and these are the steps I used:

  1. install termux (from the Play Store or FDroid)
  2. install python in termux:
pkg install python
  1. install matplotlib
  2. install a graphical environment for matplotlib (I installed tkinter):
pkg install python-tkinter
  1. install an X server
    (I used XServer XSDL)
  2. use this initialization sequence in your python:
import os
from time import sleep
os.environ["MPLBACKEND"] = "TkAgg"
os.environ["DISPLAY"] = ":0.0"
print('Loading X server...')
os.system("am start --user 0 -n x.org.server/.RunFromOtherApp 2>/dev/null")
os.environ["DISPLAY"] = ":0.0"
sleep(8) # give the X server an opportunity to start
print('Done')
import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 5, 0.1);
y = np.sin(x)
plt.plot(x, y)
plt.show()

There’s probably a better way to detect whether the X server is already running so you don’t have to launch it every time, but I haven’t figured out how to do that yet.

Use the linux shell, I have it git python and pip installed on my phone. I used gnuroot in the play store.. You can apt-get install python pip from there


The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .