2019-08-06 python-pygal畫圖

pygal是個非常簡單且功能豐富的py畫圖包,折線圖锋八、柱狀圖浙于、餅圖等常見和不常見的圖像都可輕松實現。

解決 中文字體問題挟纱、Linux系統(tǒng)亂碼問題羞酗,輸出PNG文件問題

安裝:
pip install pygal
文檔特別詳細:
http://www.pygal.org/en/stable/documentation/index.html
如下為官網折線圖實例:

line_chart = pygal.Line()
line_chart.title = 'Browser usage evolution (in %)'
line_chart.x_labels = map(str, range(2002, 2013))
line_chart.add('Firefox', [None, None,    0, 16.6,   25,   31, 36.4, 45.5, 46.3, 42.8, 37.1])
line_chart.add('Chrome',  [None, None, None, None, None, None,    0,  3.9, 10.8, 23.8, 35.3])
line_chart.add('IE',      [85.8, 84.6, 84.7, 74.5,   66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])
line_chart.add('Others',  [14.2, 15.4, 15.3,  8.9,    9, 10.4,  8.9,  5.8,  6.7,  6.8,  7.5])
chart.render()  # Return the svg as bytes
image.png
  1. 設置x軸數據:line_chart.x_labels
  2. y軸數據:line_chart.add
  3. 繪圖:line_chart.render()
  4. 保存輸出:
    bytes:chart.render() # Return the svg as bytes
    svg文件:chart.render_to_file('/tmp/chart.svg')
    png圖片:chart.render_to_png('/tmp/chart.png')

pygal對輸出圖片,及中文不夠友好,需要引入其他依賴包紊服。
pip install webencodings
pip install tinycss2
pip install defusedxml
pip install cssselect2
pip install cairocffi
pip install CairoSVG

如果是linux環(huán)境安裝cairo容易失敗檀轨,可以下載對應的系統(tǒng)包進行安裝:
https://launchpad.net/ubuntu/+source/pycairo/
我的ubuntu環(huán)境下載的:
python3-cairo_1.16.2-1_amd64.deb
安裝:dpkg -i python3-cairo_1.16.2-1_amd64.deb

linux系統(tǒng)上輸出 png會有亂碼:
解決:windows的 C:\Windows\Fonts 下的微軟雅黑.ttf文件copy到 linux的/usr/share/fonts目錄

如下為我的一段代碼胸竞,將字體改成微軟,同時輸出png:

#####################
# 折線圖:
# 兼容linux 系統(tǒng) png文字亂碼:
#   windows C:\Windows\Fonts 下的微軟雅黑.ttf文件copy到 linux/usr/share/fonts目錄
#####################

import pygal
import cairo
from pygal.style import Style
from datetime import datetime
colors_dict = {
        1:'#009688',  #
        2:'#F44336',  #
        3:'#3F51B5',  #
        }
def draw_line(data, x_label, y_title, title,colors_list):
    colors = []
    for idx in colors_list:
        if idx in colors_dict:
            colors.append(colors_dict[idx])
        else:
            colors.append(colors_dict[1])
    colors = tuple(colors)
    custom_style = Style(
      background='#FFFFFF',
      plot_background='#FFFFFF',
      value_background='rgba(229, 229, 229, 1)',
      foreground='rgba(0, 0, 0, .87)',
      foreground_strong='rgba(0, 0, 0, 1)',
      foreground_subtle='rgba(0, 0, 0, .54)',

      # Monospaced font is highly encouraged
      font_family=(
      '"微軟雅黑","華文細黑",Arial, Helvetica, sans-serif'),

      label_font_family=None,
      major_label_font_family=None,
      value_font_family=None,
      value_label_font_family=None,
      tooltip_font_family=None,
      title_font_family=None,
      legend_font_family=None,
      no_data_font_family=None,

      label_font_size=20,
      major_label_font_size=20,
      value_font_size=20,
      value_label_font_size=20,
      tooltip_font_size=14,
      title_font_size=30,
      legend_font_size=16,
      no_data_font_size=64,

      # Guide line dash array style
      guide_stroke_dasharray='6,1',
      major_guide_stroke_dasharray='6,1',

      opacity='.7',
      opacity_hover='.8',

      stroke_opacity='.8',
      stroke_opacity_hover='.9',

      transition='150ms',
      colors=colors,
      value_colors=(),
      ci_colors=())

    chart = pygal.Line(fill=True, style=custom_style,title=title,y_title=y_title,
                           x_label_rotation=20, show_legend=False,width=1600,print_values=True,
                            print_zeroes=False, print_values_position='top',
                           show_minor_x_labels=False)
    chart.x_labels = x_label
    chart.x_labels_major = x_label[::5]
    for i in data:
        chart.add(i[0], i[1])
    return chart

if __name__=="__main__":
    data = [('IE', [85.8, 84.6, 84.7, 74.5, 66, 58.6, 54.7, 44.8, 36.2, 26.6, 20.1])]
    x_label = ['2019-07-07', '2019-07-08', '2019-07-12', '2019-07-14', '2019-07-15','2019-07-16', '2019-07-17', '2019-07-18', '2019-07-19', '2019-07-20', '2019-07-21']
    print(x_label)
    y_title = "嘿嘿嘿"
    title = "哈哈哈哈"
    save_path = 'test.png'
    chart = draw_line(data, x_label, y_title, title,[1])
    chart.render_to_png(save_path)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末参萄,一起剝皮案震驚了整個濱河市卫枝,隨后出現的幾起案子,更是在濱河造成了極大的恐慌讹挎,老刑警劉巖校赤,帶你破解...
    沈念sama閱讀 221,406評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異筒溃,居然都是意外死亡马篮,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 94,395評論 3 398
  • 文/潘曉璐 我一進店門铡羡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來积蔚,“玉大人,你說我怎么就攤上這事烦周。” “怎么了怎顾?”我有些...
    開封第一講書人閱讀 167,815評論 0 360
  • 文/不壞的土叔 我叫張陵读慎,是天一觀的道長。 經常有香客問我槐雾,道長夭委,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,537評論 1 296
  • 正文 為了忘掉前任募强,我火速辦了婚禮株灸,結果婚禮上,老公的妹妹穿的比我還像新娘擎值。我一直安慰自己慌烧,他們只是感情好,可當我...
    茶點故事閱讀 68,536評論 6 397
  • 文/花漫 我一把揭開白布鸠儿。 她就那樣靜靜地躺著屹蚊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪进每。 梳的紋絲不亂的頭發(fā)上汹粤,一...
    開封第一講書人閱讀 52,184評論 1 308
  • 那天,我揣著相機與錄音田晚,去河邊找鬼嘱兼。 笑死,一個胖子當著我的面吹牛贤徒,可吹牛的內容都是我干的芹壕。 我是一名探鬼主播汇四,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哪雕!你這毒婦竟也來了船殉?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,668評論 0 276
  • 序言:老撾萬榮一對情侶失蹤斯嚎,失蹤者是張志新(化名)和其女友劉穎利虫,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體堡僻,經...
    沈念sama閱讀 46,212評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡糠惫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,299評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了钉疫。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片硼讽。...
    茶點故事閱讀 40,438評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖牲阁,靈堂內的尸體忽然破棺而出固阁,到底是詐尸還是另有隱情,我是刑警寧澤城菊,帶...
    沈念sama閱讀 36,128評論 5 349
  • 正文 年R本政府宣布备燃,位于F島的核電站,受9級特大地震影響凌唬,放射性物質發(fā)生泄漏并齐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,807評論 3 333
  • 文/蒙蒙 一客税、第九天 我趴在偏房一處隱蔽的房頂上張望况褪。 院中可真熱鬧,春花似錦更耻、人聲如沸测垛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽赐纱。三九已至,卻和暖如春熬北,著一層夾襖步出監(jiān)牢的瞬間孙咪,已是汗流浹背探遵。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人梢卸。 一個月前我還...
    沈念sama閱讀 48,827評論 3 376
  • 正文 我出身青樓荡陷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子地消,可洞房花燭夜當晚...
    茶點故事閱讀 45,446評論 2 359

推薦閱讀更多精彩內容

  • 1.QQ的安裝 1.1先安裝wine sudo apt-get install wine 問題: 解決: $ su...
    foochane閱讀 1,262評論 0 1
  • 1、軟件安裝 安裝vnc 安裝pycharm 安裝hbuilder 安裝sublime 2畏妖、簡書操作 在簡書上發(fā)表...
    舊時初_2e8d閱讀 214評論 0 6
  • 矩陣脉执,矩陣的轉置 定義A的轉置為這樣一個n×m階矩陣B,滿足B=a(j,i)戒劫,即 b (i,j)=a (j,i) ...
    taijielan閱讀 155評論 0 1
  • 我的心里住了一個小孩半夷,她很叛逆,別人叫她怎樣做他總是想要據理力爭的叛逆一下迅细,她總是想要做著與大家期盼的不一樣的人巫橄,...
    路中間的姑娘閱讀 807評論 0 1