一、获取data来源

  1、利用openpyxl从excel表格获取数据,相较于xlrd,openpyxl可以将表格里的样式也传递过来的优势

xlrd  -----------------     https://blog.csdn.net/csdnnews/article/details/80878945

openpyxl  ---------------  https://www.cnblogs.com/zeke-python-road/p/8986318.html

from openpyxl import load_workbook
from matplotlib import pyplot as plt

wb = load_workbook('qqqqqq.xlsx')
ws = wb.active

cols = []
for col in ws.iter_cols():
    col = col[1:11]
    cols.append(col)

Casename_list = []
for key in cols[2]:
    Casename_list.append(key.value)
# print(Casename_list)


Test_result = []
for key in cols[7]:
    Test_result.append(key.value)

二、data图表分析

  1、利用matplotlab 

  存在中文编码问题:

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

plt.plot((1,2,3),(4,5,7))
plt.xlabel('横坐标')
plt.ylabel('纵坐标')
plt.show()
--------------------- 
作者:Yrish 
来源:CSDN 
原文:https://blog.csdn.net/sinat_29699167/article/details/80029898 
版权声明:本文为博主原创文章,转载请附上博文链接!

  2、echarts    -----    https://www.cnblogs.com/a10086/p/9551966.html

    A、后台拼凑数据

class Echarts_html(TemplateView):
    template_name = "templeate/app01/echarts.html"

    def get_context_data(self, **kwargs):
        context = super(Echarts_html, self).get_context_data(**kwargs)
        aaa= {
            'title': {
                'text': 'ECharts 入门示例'
            },
            'tooltip': {},
            'legend': {
                'data': ['销量']
            },
            'xAxis': {
                'data': []
            },
            'yAxis': {},
            'series': [{
                'name': '销量',
                'type': 'bar',
                'data': []
            }]
        }
        articles = Article.objects.all()
        for item in articles:
            aaa['xAxis']['data'].append(item.title)
            aaa['series'][0]['data'].append(item.read_count)
        context['aaa'] = aaa
        return context

  前台代码,数据处理完毕,前台直接使用。但是记得加{{xxx|safe}} 否则会被转义(xss跨站了解下)

<body>
  <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {{ aaa | safe}};
        myChart.setOption(option);
    </script>
</body>

  3、前台js处理数据 

class Echarts_html(TemplateView):
    template_name = "templeate/app01/echarts.html"

    def get_context_data(self, **kwargs):
        context = super(Echarts_html, self).get_context_data(**kwargs)
        context['articles'] = Article.objects.all()
        return context

前台代码,js处理,注意的一点就是js中数组push(类似append)必须是字符串或者数字,直接"xxxx"转成字符串。

<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 600px;height:400px;"></div>
    <script type="text/javascript">
        // 基于准备好的dom,初始化echarts实例
        var myChart = echarts.init(document.getElementById('main'));

        // 指定图表的配置项和数据
        var option = {
            'title': {
                'text': 'ECharts 入门示例'
            },
            'tooltip': {},
            'legend': {
                'data': ['阅读量']
            },
            'xAxis': {
                'data': []
            },
            'yAxis': {},
            'series': [{
                'name': '阅读量',
                'type': 'bar',
                'data': []
            }]
        }
        {% for item in articles %}
            option['xAxis']['data'].push("{{ item.title }}")
            option['series'][0]['data'].push("{{ item.read_count }}")
        {% endfor %}
        console.log(option)

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    </script>


</body>

三、eg

  1、前台

from django.views.generic.base import TemplateView
from .models import *
class Echarts_html(TemplateView):
    template_name = "../templates/eg1.html"
    def get_context_data(self, **kwargs):
        context = super(Echarts_html, self).get_context_data(**kwargs)
        aaa = {
            'title': {
                'text': 'ECharts 测试示例'
            },
            'tooltip': {},
            'legend': {
                'data': ['销量']
            },
            'xAxis': {
                'data': []
            },
            'yAxis': {},
            'series': [{
                'name': '销量',
                'type': 'bar',
                'data': []
            }]
        }
        articles = Article.objects.all()
        for item in articles:
            aaa['xAxis']['data'].append(item.name)
            aaa['series'][0]['data'].append(item.read_count)
        context['aaa'] = aaa
        return context

    def post(self,request):
        print('post')
        return HttpResponse('post')

  2、后台

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcss.com/echarts/4.2.0-rc.2/echarts.js"></script>
</head>
<style>
    #myimg {
        border: 1px solid red;
        height: 18px;
        width: 18px;
        background-image: url('2.png');
        background-position-y: 138px;
    }
</style>
<body>

<form action="" method="post">
    <input type="text">
    <input type="submit" value="带点">

</form>

<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 600px;height:400px;"></div>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('main'));

    // 指定图表的配置项和数据
    var option = {{ aaa | safe}};
    myChart.setOption(option);
</script>

</body>
</html>