Search code examples
pythonsvgrenderingdata-visualizationpygal

pygal rendering png/svg black pictures


I am using python (with a virtual env in LinuxMint), I installed pygal.

Everything works fine (rendering to html) but not rendering to svg or png . The result : Nothing but a black background.

I installed cssselect and tinycss like mentioned here .

It works for the first time, but when retrying, I had the same issue .

(I don't know if this is related or not, but this happens to me when exporting a photo using darktable last week)

I use the example from the website of pygal:

import pygal                                                       # First import pygal
bar_chart = pygal.Bar()                                            # Then create a bar graph object
bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])  # Add some values
bar_chart.render_to_file('bar_chart.svg')                          # Save the svg to a file

EDIT:

bar_chart.render_to_png('bar_chart.png')

is working now .

But not:

bar_chart.render_to_file('bar_chart.svg')

Solution

  • You need to install lxml as well. So assuming you are in a virtualenv run the following command on your bash/zsh prompt:

    pip install lxml

    If you only have the other 3 libraries, i.e. cssselect, pycairo, tinycss. Then you will be able to properly render an SVG but the PNG render function will produce a solid black image file (without lxml installed)

    The gist below shows all the steps:

    [FIRST: install the required libraries]

    • pip install lxml
    • pip install cairosvg
    • pip install tinycss
    • pip install cssselect

    [SECOND: create the file]

    #Create a PNG file with Pygal
    import pygal
    
    bar_chart = pygal.Bar()
    bar_chart.add('Fibonacci', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])
    bar_chart.render_to_file('bar_chart.svg')
    bar_chart.render_to_png(filename='bar_chart.png')
    

    If you get black svg images in Image Viewer (Ubuntu) or Gimp, try opening the image in Chrome.