网站搭建 (第11天) 阅读量曲线图

一、前言

  为了让自己能直观的看出博客阅读量的变化,而不需要到后台观察,所以就使用了Highcharts的基础折线图来帮助实现。其文档地址:Highcharts 演示

  样例效果:

  通过阅读API文档,可以实现自己想要的样式,也可以改变线条的颜色。一系列的配置主要有chart: {图表配置},colors: [颜色集合],credits: {版权信息},data: {数据功能模块},drilldown: {钻取},exporting: {导出},labels: {标签},legend: {图例},loading: {加载},navigation: {导航},noData: {没有数据},plotOptions: {数据列配置},responsive: {响应式},series: [{数据列}],subtitle: {副标题},title: {标题},tooltip: {数据提示框},xAxis: [{X 轴}],yAxis: [{Y 轴}],zAxis: {Z 轴}。

  不过这样调试起来比较麻烦,因为每修改一个地方就要去观察图表是否有所改变,不然到时候什么地方出了问题却不知道是哪一步骤错误导致的。幸好Highcharts提供了可视化编辑功能,支持在线调试,最后把所需要的js代码贴到项目中即可,可视化编辑:基础折线图-可视化

二、Highcharts基本使用

  该图表显示基本是靠js来实现的,HTML结构里只需要定义一个div,id值为container,这个container要与js里的容器名一样。

<div id="container" style="max-width:800px;height:400px"></div>

  js代码如下:

var chart = Highcharts.chart(‘container‘, {
    title: {
        text: ‘2010 ~ 2016 年太阳能行业就业人员发展情况‘
    },
    subtitle: {
        text: ‘数据来源:thesolarfoundation.com‘
    },
    yAxis: {
        title: {
            text: ‘就业人数‘
        }
    },
    legend: {
        layout: ‘vertical‘,
        align: ‘right‘,
        verticalAlign: ‘middle‘
    },
    plotOptions: {
        series: {
            label: {
                connectorAllowed: false
            },
            pointStart: 2010
        }
    },
    series: [{
        name: ‘安装,实施人员‘,
        data: [43934, 52503, 57177, 69658, 97031, 119931, 137133, 154175]
    }, {
        name: ‘工人‘,
        data: [24916, 24064, 29742, 29851, 32490, 30282, 38121, 40434]
    }, {
        name: ‘销售‘,
        data: [11744, 17722, 16005, 19771, 20185, 24377, 32147, 39387]
    }, {
        name: ‘项目开发‘,
        data: [null, null, 7988, 12169, 15112, 22452, 34400, 34227]
    }, {
        name: ‘其他‘,
        data: [12908, 5948, 8105, 11248, 8989, 11816, 18274, 18111]
    }],
    responsive: {
        rules: [{
            condition: {
                maxWidth: 500
            },
            chartOptions: {
                legend: {
                    layout: ‘horizontal‘,
                    align: ‘center‘,
                    verticalAlign: ‘bottom‘
                }
            }
        }]
    }
});

  可以看到,data是一个列表,事实上xAxis和yAxis (也就是x轴与y轴)也可以接受列表的数据。我要的功能很简单,只需要一个标题,一条曲线,一个日期的x轴和对应的列表数据,那首先就需要拿到日期和阅读量数据的列表。

  定义一个可以返回日期和对应阅读量数据的列表,先以最近七天阅读量变化为例。

def get_seven_days_read_data(content_type):
    """
    作用:获取七天内的阅读记录
    :param content_type: 数据表的模型类
    :return: 七天内的日期和阅读量
    """
    today = timezone.now().date()
    dates = []
    read_nums = []
    for i in range(7, 0, -1):
        # timedelta表示日期差量
        date = today - datetime.timedelta(days=i-1)
        dates.append(date.strftime(‘%m/%d‘))
        read_detail = ReadDetail.objects.filter(content_type=content_type, date=date)
        result = read_detail.aggregate(read_num_sum=Sum(‘read_num‘))
        # 如果前面不为false就取前面的,如为false则取后面的
        read_nums.append(result[‘read_num_sum‘] or 0)
    return dates, read_nums

  拿到dates和read_nums两个列表以后,就可以通过render函数将它们传入到前端页面。

<div id="container"></div>

<script>
   // 图表配置
   var options1 = {
       chart: {
           type: ‘line‘
       },   //指定图表的类型,默认是折线图(line)
       title: { text: null },     // 标题
       xAxis: {
           categories: {{ seven_dates|safe }},  // x 轴分类
           tickmarkPlacement: ‘on‘,
           title: { text: ‘过去七日阅读量变化‘ }
       },

       yAxis: {
           title: { text: null }, // y 轴标题
           labels:{ enabled:false },
           gridLineDashStyle: ‘ShortDash‘,  // 刻度线对齐方式
       },

       series: [{                              // 数据列
           name: ‘阅读量‘,                        // 数据列名
           data: {{ seven_read_nums }}                     // 数据
       }],

       plotOptions:{
           line:{
               dataLabels: {
                   enabled: true,
                   color:‘darkblue‘,
               }
           }
       },

       legend:{ enabled: false },     //消除图例
       credits: { enabled:false },     //消去版权信息
   };

    // 图表初始化函数
    var chart = Highcharts.chart(‘container‘, options1);
</script>

  接下来,还有一个全年阅读量,与七天内阅读量变化类似,这就需要对每月的阅读量进行Sum后返回。

import datetime

def get_year_read_data(content_type):
    """
    作用:获取该年每个月的阅读记录
    :param content_type: 数据表的模型类
    :return: 全年每月的阅读量
    """
    # 获取每个月的阅读记录
    months = []
    read_nums = []
    year = datetime.datetime.now().year
    month = datetime.datetime.now().month

    for month in range(1, month+1):
        months.append(str(month) + ‘月‘)
        read_month_data = ReadDetail.objects.filter(content_type=content_type, date__year=year, date__month=month)
        result = read_month_data.aggregate(read_num_sum=Sum(‘read_num‘))
        read_nums.append(result[‘read_num_sum‘] or 0)

    return months, read_nums, year

  比七天阅读量变化不同的是,多传了一个year到模板中,这是为了使代码能够适应年份的变化而增加的一个参数。

<div id="container2"></div>

<script>
    var options2 = {
        chart: { type: ‘line‘ },   //指定图表的类型,默认是折线图(line)
            title: { text: null },     // 标题
        xAxis: {
            categories: {{ thirty_dates|safe }},  // x 轴分类
            tickmarkPlacement: ‘on‘,
            title: { text: {{ year }}+‘年阅读量变化‘}
        },

        yAxis: {
            title: { text: null }, // y 轴标题
            labels:{ enabled:false },
            gridLineDashStyle: ‘ShortDash‘,  // 刻度线对齐方式
        },

        series: [{                              // 数据列
            name: ‘阅读量‘,                        // 数据列名
            data: {{ thirty_read_nums }}                     // 数据
        }],

        plotOptions:{
            line:{
                dataLabels: {
                    enabled: true,
                    color:‘darkblue‘,
                }
            }
        },

        legend:{ enabled: false },     //消除图例
        credits: { enabled:false },     //消去版权信息
    };

    // 图表初始化函数
    var chart = Highcharts.chart(‘container2‘, options2);
</script>

?  曲线图就制作好了,不过好多细节和自定义的功能还是应该多看看API,我只参透了一点皮毛就觉得意义匪浅。另外还有一个特别注意的地方,必须引入Highcharts的script才可生效,之前被坑过,请留意。

<script src="https://cdn.hcharts.cn/highcharts/highcharts.js"></script>

  原文出处:https://jzfblog.com/detail/94,文章的更新编辑以此链接为准。欢迎关注源站文章!

原文地址:https://www.cnblogs.com/djcoder/p/10849334.html

时间: 2024-11-05 06:11:24

网站搭建 (第11天) 阅读量曲线图的相关文章

搭建自己的博客(十六):封装优化阅读量代码

1.将阅读量的代码封装在一个app中,增加扩展性 新建app: python manage.py startapp read_statistics 2.变化的部分 3.上代码 from django.contrib import admin from .models import BlogType, Blog # Register your models here. @admin.register(BlogType) class BlogTypeAdmin(admin.ModelAdmin):

网站搭建 (第07天) 简单阅读计数

一.前言 如果知道每篇文章的浏览量,管理员就可以了解到访问者对文章的喜好程度,方便后续推出相关内容文章,同时对热门博客的统计和阅读趋势图打好基础.针对阅读统计功能,前前后后我一共想到了三种方法,各种方法都有利有弊. 二.采用该模型字段计数 ?1) 修改Post模型read_num.    2) 优化:设置cookie判断是否用户多次点击response.set_cookie().        优点:简单.        缺点:1.后台编辑博客可能影响数据.                   

ret hat 6&ret hat 7 Apache网站搭建(一)

Apache 简介 Apache HTTP Server 是开源软件项目的杰出代表基于标准的HTTP网络协议提供网贡浏览 服务在We服务器领域中长期保持着超过半数的份额.Aapache服务器可以运行在Lnux.UNX Wndows 等多种操作系统平台中, 1.Apache 的起源 Apathe服务器是针对之前出现的若干个Web服务器程序进行整合.完善后形成的软件.其名 称来源于A Palchy Server 意思是"基于原有Web 服务程序的代码进行修改(补T) 后形成的 服务器程序"

linux下网站搭建

我们知道windows网站搭建一般是:IIS+Asp+Sqlserver,而 linux网站搭建是:Apache+php+Mysql.两者之间个有千秋,但是为什么我们许多的门户网站搭建都选择linux— apache+php+mysql呢?当然是其的安全性了,Apache 是世界排名第一的Web 服务器, 根据Netcraf所作的调查,世界上百分之五十以上的Web 服务器在使用Apache.在搭建平台时,也可以直接使用RPM 包来安装,但是由于使用RPM 包在一些系统上不支持,因此我们使用更通用

red hat 6&red hat 7 Apache网站搭建(二)虚拟主机

虚拟Web 主机指的是在同一台服务器中运行多个Web 站点,其中的每一个站点实际上并不 独立占用整个服务器,因此被称为'虚拟"Web 主机.通过虚拟Web 主机服务可以充分利用服务 器的硬件资源,从而大大降低网站构建及运行成本. 使用httpd 可以非常方便地构建虚拟主机服务器,只需要运行一个httpd 服务就能够同时支撑 大量的Web站点.httpd支持的虚拟主机类型包括以下三种. 基于域名: 为每个虚拟主机使用不同的域名,但是其对应的IP 地址是相同的.例如, www.benet.com和w

基于搜狗微信搜索获取公众号文章的阅读量及点赞量

测试日期:2016/11/13 文章url样例: http://mp.weixin.qq.com/s?src=3&timestamp=1479004927&ver=1&signature=Z0OsvrGeP25z1f3laEdZjxCrLMvrwg3UfOxCFM1z5i-7qBOaiZDcL3lApbrzHiq5simLQc*n3KB-Ljy01WvBYFZB5D8S8Hcy5lgy6ejl0-HGr6QkqnRVIHMT6Xh5HzfIipcnWZyla-GJGQcxzMhqi

Go语言?对微信约战棋牌网站搭建新技术怎么看?

上个月,作为 Go 微信约战棋牌网站搭建( h5.super-mans.com    Q:2012035031)微信约战棋牌网站搭建语言的三位创始人之一,Unix 老牌黑客罗勃·派克(Rob Pike)在新文章"Go: Ten years and climbing"中,回顾了一下 Go 语言的发展过程.其中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言.还提到了,中国程序员对 Go 语言的热爱完全超出了他们的想象,甚至他们都不敢相信是

LAMP搭建以及企业网站搭建

linux中的LAMP的部署以及企业网站的搭建 1.先卸载以rpm方式安装的php以及依赖包 2.插入linux的系统盘并安装zlib-devel和libmxl2-devel 3.在挂载libmcrypt光盘,并安装和配置 (make && make install) 4.执行优化 5.安装mhash软件 并配置和安装(make && make install) 6.执行优化 7.安装mcrypt软件,并配置和安装(make && make install)

分布式事务极速快三网站搭建之服务设计和实现注意事项

1.极速快三网站搭建 TCC是一种比较成熟的分布式事务解决方案,可用于解决跨库操作的数据一致性问题: TCC是服务化的两阶段编程模型,其Try.Confirm.Cancel 3个方法均由业务编码实现: 其中Try操作作为一阶段,负责资源的检查和预留,Confirm操作作为二阶段提交操作,执行真正的业务,Cancel是预留资源的取消: 如下图所示,业务实现TCC服务之后,该TCC服务将作为分布式事务的其中一个资源,参与到整个分布式事务中:事务管理器分2阶段协调TCC服务,在第一阶段调用所有TCC服