2014-06-29 28 views
13

Tôi đang sử dụng python (với một env ảo trong LinuxMint), tôi đã cài đặt pygal.hình ảnh png/svg pygal rendering

Mọi thứ hoạt động tốt (hiển thị thành html) nhưng không hiển thị với svg hoặc png. Kết quả: Không có gì ngoài một nền đen.

Tôi đã cài đặt cssselecttinycss như đã đề cập here.

Tính năng này hoạt động lần đầu tiên, nhưng khi thử lại, tôi đã gặp phải vấn đề tương tự.

(Tôi không biết nếu điều này là có liên quan hay không, nhưng điều này xảy ra với tôi khi xuất khẩu một bức ảnh sử dụng darktable tuần trước)

tôi sử dụng ví dụ từ trang web của 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') 

đang làm việc bây giờ.

Nhưng không:

bar_chart.render_to_file('bar_chart.svg') 
+1

Tôi đã nhận được hình ảnh svg đen khi tôi đang xem chúng trong GIMP hoặc Trình xem hình ảnh mặc định trên Ubuntu. Các hình ảnh hiển thị tốt khi tôi mở chúng trong Chrome. Tôi không biết tại sao điều này lại xảy ra. –

Trả lời

26

Bạn cần cài đặt lxml là tốt. Vì vậy, giả sử bạn đang ở trong một virtualenv chạy lệnh sau vào dấu nhắc bash/zsh của bạn:

pip install lxml

Nếu bạn chỉ có 3 thư viện khác, ví dụ: cssselect, pycairo, tinycss. Sau đó, bạn sẽ có thể hiển thị chính xác tập tin SVG lên nhưng PNG làm cho chức năng sẽ tạo ra một file ảnh đen rắn (không lxml cài đặt)

Các ý dưới đây cho thấy tất cả các bước sau:

[FIRST: cài đặt các thư viện cần thiết ]

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

[THỨ HAI: tạo file]

""" 
pygal_render_png 
"""" 
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') 

Nếu bạn nhận được hình ảnh svg đen trong Image Viewer (Ubuntu) hoặc Gimp, hãy thử mở hình ảnh trong Chrome.

+1

Thực ra đây là câu trả lời - Tôi nhận được cùng một vấn đề với tư cách là tác giả câu hỏi và có thể giải quyết nó với sự giúp đỡ của nhận xét của @emk. Cảm ơn bạn! –

+0

Nếu bạn phải mở nó trong một trình duyệt cụ thể cho nó không giống như crap (tôi làm), sau đó nó chỉ không hoạt động. Tôi sẽ dính với matplotlib cho đến khi họ làm việc này ra. – neuronet

1

Chỉ trong trường hợp bất kỳ ai khác gặp phải vấn đề tương tự, vấn đề của tôi là SVG có vẻ tốt trong trình duyệt, nhưng không có trong Inkscape. Tôi đã sử dụng css tùy chỉnh và đặt fill: transparent trên một số yếu tố. Nó phải là fill: none.

0

1) Cài đặt các phụ thuộc như tài liệu (http://pygal.org/en/stable/installing.html)

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

2) Tạo biểu đồ và đưa ra để nộp

line_chart.render_to_file(file_svg_name) 

3) Tạo svg lại (sử dụng cùng một tập tin), nhưng sử dụng cairo lib

import cairosvg 
cairosvg.svg2svg(url=file_svg_name, write_to=file_svg_name) 

I t đã làm việc cho tôi.