How to display python matplotlib graphs (png) with Chaquopy in Android Studio










2















So I use chaquopy to get simple python programs functioning in an old (jelly bean) tablet (I replace the example console app's main.py in the src directory). Not bad for a beginner's start and I'm very happy.



But now for a test I try to display a matplotlib graph like this:



import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def main():

image = mpimg.imread("/storage/emulated/0/Documents/test.png")
plt.imshow(image)
plt.show()


The matplotlib library was installed from within android studio (albeit with a few missing elements, manual pip3 install and usage of local files). Now the build and program finish without errors, but there is no graph. Installation of pillow and use of other graph types no avail.



Can this be handled in python, or is a dive into android studio / java required?



Thanks for any advice










share|improve this question
























  • Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

    – mhsmith
    Nov 14 '18 at 15:39











  • I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

    – Peter
    Nov 20 '18 at 15:58











  • Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

    – mhsmith
    Nov 21 '18 at 13:16















2















So I use chaquopy to get simple python programs functioning in an old (jelly bean) tablet (I replace the example console app's main.py in the src directory). Not bad for a beginner's start and I'm very happy.



But now for a test I try to display a matplotlib graph like this:



import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def main():

image = mpimg.imread("/storage/emulated/0/Documents/test.png")
plt.imshow(image)
plt.show()


The matplotlib library was installed from within android studio (albeit with a few missing elements, manual pip3 install and usage of local files). Now the build and program finish without errors, but there is no graph. Installation of pillow and use of other graph types no avail.



Can this be handled in python, or is a dive into android studio / java required?



Thanks for any advice










share|improve this question
























  • Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

    – mhsmith
    Nov 14 '18 at 15:39











  • I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

    – Peter
    Nov 20 '18 at 15:58











  • Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

    – mhsmith
    Nov 21 '18 at 13:16













2












2








2








So I use chaquopy to get simple python programs functioning in an old (jelly bean) tablet (I replace the example console app's main.py in the src directory). Not bad for a beginner's start and I'm very happy.



But now for a test I try to display a matplotlib graph like this:



import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def main():

image = mpimg.imread("/storage/emulated/0/Documents/test.png")
plt.imshow(image)
plt.show()


The matplotlib library was installed from within android studio (albeit with a few missing elements, manual pip3 install and usage of local files). Now the build and program finish without errors, but there is no graph. Installation of pillow and use of other graph types no avail.



Can this be handled in python, or is a dive into android studio / java required?



Thanks for any advice










share|improve this question
















So I use chaquopy to get simple python programs functioning in an old (jelly bean) tablet (I replace the example console app's main.py in the src directory). Not bad for a beginner's start and I'm very happy.



But now for a test I try to display a matplotlib graph like this:



import matplotlib.pyplot as plt
import matplotlib.image as mpimg
def main():

image = mpimg.imread("/storage/emulated/0/Documents/test.png")
plt.imshow(image)
plt.show()


The matplotlib library was installed from within android studio (albeit with a few missing elements, manual pip3 install and usage of local files). Now the build and program finish without errors, but there is no graph. Installation of pillow and use of other graph types no avail.



Can this be handled in python, or is a dive into android studio / java required?



Thanks for any advice







android python matplotlib chaquopy






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 14 '18 at 15:40









mhsmith

2,76312243




2,76312243










asked Nov 13 '18 at 16:28









PeterPeter

113




113












  • Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

    – mhsmith
    Nov 14 '18 at 15:39











  • I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

    – Peter
    Nov 20 '18 at 15:58











  • Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

    – mhsmith
    Nov 21 '18 at 13:16

















  • Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

    – mhsmith
    Nov 14 '18 at 15:39











  • I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

    – Peter
    Nov 20 '18 at 15:58











  • Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

    – mhsmith
    Nov 21 '18 at 13:16
















Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

– mhsmith
Nov 14 '18 at 15:39





Installing matplotlib should be easy, so I'm concerned by "a few missing elements, manual pip3 install and usage of local files". If you had any problems here, please report them at the Chaquopy GitHub page.

– mhsmith
Nov 14 '18 at 15:39













I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

– Peter
Nov 20 '18 at 15:58





I unfortunately do not have the logs anymore, but I remember that even after a manual pip3 install of matplotlib, it was still necessary to install freetype (a dev version was suggested). So I now have both libfreetype6 and libfreetype6-dev installed.

– Peter
Nov 20 '18 at 15:58













Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

– mhsmith
Nov 21 '18 at 13:16





Chaquopy comes with its own copy of pip which installs into an isolated environment, so what you have installed on the build machine should make no difference.

– mhsmith
Nov 21 '18 at 13:16












1 Answer
1






active

oldest

votes


















0














You'll have to include an ImageView in your app's layout, and then load the image file into it, as in this answer.



For an image which is generated dynamically by matplotlib, either save it to a file and then load from that file, or save it to a bytes object like this:



import io
bio = io.BytesIO()
plt.savefig(bio, format="png")
b = bio.getvalue()


... and then load that bytes object into the ImageView like in this app.






share|improve this answer























  • OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

    – Peter
    Nov 20 '18 at 15:40











  • @Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

    – mhsmith
    Nov 21 '18 at 13:18











Your Answer






StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");

StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);

StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);

else
createEditor();

);

function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);



);













draft saved

draft discarded


















StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285429%2fhow-to-display-python-matplotlib-graphs-png-with-chaquopy-in-android-studio%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown

























1 Answer
1






active

oldest

votes








1 Answer
1






active

oldest

votes









active

oldest

votes






active

oldest

votes









0














You'll have to include an ImageView in your app's layout, and then load the image file into it, as in this answer.



For an image which is generated dynamically by matplotlib, either save it to a file and then load from that file, or save it to a bytes object like this:



import io
bio = io.BytesIO()
plt.savefig(bio, format="png")
b = bio.getvalue()


... and then load that bytes object into the ImageView like in this app.






share|improve this answer























  • OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

    – Peter
    Nov 20 '18 at 15:40











  • @Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

    – mhsmith
    Nov 21 '18 at 13:18
















0














You'll have to include an ImageView in your app's layout, and then load the image file into it, as in this answer.



For an image which is generated dynamically by matplotlib, either save it to a file and then load from that file, or save it to a bytes object like this:



import io
bio = io.BytesIO()
plt.savefig(bio, format="png")
b = bio.getvalue()


... and then load that bytes object into the ImageView like in this app.






share|improve this answer























  • OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

    – Peter
    Nov 20 '18 at 15:40











  • @Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

    – mhsmith
    Nov 21 '18 at 13:18














0












0








0







You'll have to include an ImageView in your app's layout, and then load the image file into it, as in this answer.



For an image which is generated dynamically by matplotlib, either save it to a file and then load from that file, or save it to a bytes object like this:



import io
bio = io.BytesIO()
plt.savefig(bio, format="png")
b = bio.getvalue()


... and then load that bytes object into the ImageView like in this app.






share|improve this answer













You'll have to include an ImageView in your app's layout, and then load the image file into it, as in this answer.



For an image which is generated dynamically by matplotlib, either save it to a file and then load from that file, or save it to a bytes object like this:



import io
bio = io.BytesIO()
plt.savefig(bio, format="png")
b = bio.getvalue()


... and then load that bytes object into the ImageView like in this app.







share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 14 '18 at 15:38









mhsmithmhsmith

2,76312243




2,76312243












  • OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

    – Peter
    Nov 20 '18 at 15:40











  • @Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

    – mhsmith
    Nov 21 '18 at 13:18


















  • OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

    – Peter
    Nov 20 '18 at 15:40











  • @Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

    – mhsmith
    Nov 21 '18 at 13:18

















OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

– Peter
Nov 20 '18 at 15:40





OK, I managed to show a png graph using imagegeview. Thank you very much. I did not test the bytes object yet, but it will also show just an image. What I now realize is that I wanted to make use of the matplotlib plt.show() function, because then the graph is not passively displayed, but shown with zoom/pan functions. Would that be possible?

– Peter
Nov 20 '18 at 15:40













@Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

– mhsmith
Nov 21 '18 at 13:18






@Peter: It's not currently possible: it would require someone to write an Android front end for matplotlib.

– mhsmith
Nov 21 '18 at 13:18




















draft saved

draft discarded
















































Thanks for contributing an answer to Stack Overflow!


  • Please be sure to answer the question. Provide details and share your research!

But avoid


  • Asking for help, clarification, or responding to other answers.

  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.




draft saved


draft discarded














StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53285429%2fhow-to-display-python-matplotlib-graphs-png-with-chaquopy-in-android-studio%23new-answer', 'question_page');

);

Post as a guest















Required, but never shown





















































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown

































Required, but never shown














Required, but never shown












Required, but never shown







Required, but never shown







Popular posts from this blog

Use pre created SQLite database for Android project in kotlin

Darth Vader #20

Ondo