Python畫圖


Python畫圖

使用Echarts

Echarts是百度開源的js繪圖工具,
pyechartsEcharts的封裝, 安裝pip install pyecharts.

pyecharts只能將繪好的js保存為html, 可以使用pyecharts-snapshot將生成的html轉為pdfpnggit.

官方文檔http://pyecharts.org/#/zh-cn/prepare

pyecharts-snapshot依賴於phantomjs, Windows安裝可以在官網下載zip包,解壓后,將C:\\**\bin\目錄添加到環境變量的Path中.

安裝pip install pyecharts-snapshot

餅圖

使用方式

# -*- coding:utf-8 -*-
from __future__ import unicode_literals
from pyecharts import Pie
from pyecharts_snapshot.main import make_a_snapshot
from PIL import Image
import os
import sys

savety = [u'危險', u'比較危險', u'比較安全', u'安全']
savety_colors = [u'#df0000', u'#ff5f5a', u'#37baf1', u'#10ae50']
savety_x = [6, 1, 2, 3]

# 標題居中
pie = Pie()
pie.add(
    # title
    '',
    # label
    savety,
    # 數值,比例
    savety_x,
    # 顯示label
    is_label_show=True,
    # 不顯示顏色提示的意思
    is_legend_show=False,
    # 是否高亮顯示標簽
    is_label_emphasis=False,
    # label字體size
    label_text_size=25,
    # 隨機顏色
    # is_random=True,
    # 自定義標簽顏色
    label_color=savety_colors,
    # 右側工具箱
    is_toolbox_show=False
)

# 將生成的圖片保存為html
pie.render()
# 將標准輸出的信息,重定向到文件中
current = sys.stdout
f = open('temp', 'w')
sys.stdout = f
# 將html保存為pdf或png
make_a_snapshot('render.html', 'test.png')
# 還原標准輸出
sys.stdout = current
f.close()
os.remove('render.html')
os.remove('temp')

img = Image.open('test.png')
w, h = img.size
img = img.resize((int(w*0.3), int(h*0.3)), Image.ANTIALIAS)
img.save('hhh.png')
os.remove('test.png')

使用make_a_snapshot生成的圖片是屏幕的截圖, 文件大小很大.
使用PIL對圖片進行一個縮小, 如果直接使用resize命令, 會對圖片進行扭曲壓縮,不是等比縮放的,
對圖片的寬和高都和一個固定值相乘,可以實現等比的縮放.
Image.ANTIALIAS是對圖片進行高清的縮放.

柱狀圖

示例

# -*- coding:utf-8 -*-
from __future__ import unicode_literals
from pyecharts import  Bar

attr = ['Cifs', 'DNS', 'FTP', 'RPC', 'SMB']

info =[10, 2, 2, 18, '']
low = [6, 5, 5, 1, 1]
medium = [7, 8, 1, '', 6]
high = [1, 8, 1, '', 2]
urgent = ['', 1, 2, '', '']
colors = ['#10ae50', '#37baf1', '#ffa92e', '#ff605a', '#df0000']

bar = Bar('test')

# 全局配置項要在最后一個 add() 上設置,否側設置會被沖刷掉。
# 交換x y軸
# is_convert=True
# y軸字體顏色,默認是黑色
# yaxis_label_textcolor='#00000'

# add(name, x_axis, y_axis,
#     is_stack=False,
#     bar_category_gap='20%', **kwargs)

bar.add('信息', attr, info, is_label_show=True, label_pos='inside', is_stack=True)
bar.add('低危', attr, low, is_label_show=True, label_pos='inside', is_stack=True)
bar.add('中危', attr, medium, is_label_show=True, label_pos='inside', is_stack=True)
bar.add('高危', attr, high, is_label_show=True, label_pos='inside', is_stack=True)
bar.add('緊急', attr, urgent, is_stack=True,
        # 網格線
        is_splitline_show=False,
        label_pos='inside',
        # 是否高亮顯示標簽
        # is_label_emphasis=False,
        # 高亮標簽字體顏色
        # label_emphasis_textcolor='red',
        # 高亮標簽的位置
        label_emphasis_pos='inside',
        # 標簽數據
        is_label_show=True,
        # 標簽顏色自定義
        label_color=colors,
        # 標簽字體顏色
        label_text_color='#000',
        # 標簽字體大小
        label_text_size=15,
        # x/y交換
        is_convert=True,
        # y軸刻度標簽
        # yaxis_interval=0,
        # 是否顯示y軸
        # is_yaxis_show=False,
        # y軸反向顯示
        is_yaxis_inverse=True,
        # 不顯示工具箱
        is_toolbox_show=False
        )
bar.render()

使用matplotlib

matplotlib使用的比較廣泛, 有很多功能都還沒有研究到.

安裝pip install matplotlib

示例

# -*- coding: utf-8 -*-
from matplotlib import mlab, font_manager as fm
from matplotlib import pyplot as plt


savety = [u'危險', u'比較危險', u'比較安全', u'安全']
savety_colors = [u'#df0000', u'#ff5f5a', u'#37baf1', u'#10ae50']
labels = [u'信息', u'低風險', u'中風險', u'高風險', u'緊急']
savety_x = [6, 1, 1, 1]

# matplotlib顯示中文的問題
plt.rcParams['font.sans-serif'] = ['SimHei']
# 顯示負號
plt.rcParams['axes.unicode_minus'] = False
# 設置為圓形,不設置就是橢圓的
plt.axis('equal')
# 畫餅圖(數據,數據對應的標簽,百分數保留兩位小數點)
# patches是餅圖的返回值,texts是餅外的文本,autotexts是餅內的文本
pathches, texts, autotexts = plt.pie(savety_x,
                                     # 餅圖的顏色
                                     colors=savety_colors,
                                     # 標簽名
                                     labels=savety,
                                     # 小數
                                     autopct='%1.1f%%',
                                     # 角度
                                     startangle=90,
                                     )

# 顏色提示, loc設置legend的位置,包括'upper right', 'upper left', 'lower right', 'lower left'
# bbox_to_anchor: 表示legend距離圖形之間的距離,當出現圖形與legend重疊時,可使用bbox_to_anchor進行調整legend的位置
plt.legend(loc='upper right', bbox_to_anchor=(1.1, 1.1))
# 一定要放在plt.show()之前
plt.savefig("PieChart.jpg")
plt.show()
plt.close()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM