Python – 绘制人体生物节律

项目说明

这里仿照 http://www.4qx.net/The_Human_Body_Clock.php 做一个人体生物节律的计算和展示

关于人体生物节律

基本生物节律
情绪(28天)
影响:情绪、灵敏度、创造力

体力(23天)
影响:力量、韧性、耐久力、协调性

智力(33天)
影响:分析思考、逻辑、学习能力、记忆力

次级生物节律
精神(53天)
直觉(38天)
意识(48天)
美感(43天)

用到的技术

代码实现

获取每月有多少天

import time  
import datetime
import os 


def get_days_4month(y, m):

    if m < 1 and m > 12:  # 保证用户输入月份是在1-12月份
        print('输入日期错误')
        return 0

    t = 0  # t 变量用于表示闰年和平年的标志位
    list_maxm = [1, 3, 5, 7, 8, 10, 12]  # 创建大月的列表
    list_litem = [4, 6, 9, 11]  # 创建小月的列表
    if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:
        t = 1
    if m in list_maxm:
        d = 31  # 计算大月的天数
    elif m == 2 and t == 0:
        d = 28  # 计算平年中2月的天数
    elif m == 2 and t == 1:
        d = 29  # 计算闰年中2月的天数
    elif m in list_litem:
        d = 30  # 计算小月的天数

    return d

计算每天到生日过了多少天

format  = '%Y-%m-%d'

# 2023-02-12
def get_gap(birthday, day):
 
    d1 = datetime.datetime.strptime(birthday , format)
    d2 = datetime.datetime.strptime(day , format)
    diff = d2 - d1
    # print(diff.days)
    return diff.days

计算节律


TL_DUR = 23
QX_DUR = 28
ZL_DUR = 33


def get_rhythm(gap):
    tl_circle = int(gap / TL_DUR)
    tl_day = gap % TL_DUR

    qx_circle = int(gap / QX_DUR)
    qx_day = gap % QX_DUR

    zl_circle = int(gap / ZL_DUR)
    zl_day = gap % ZL_DUR

    # print(tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day)
    return tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day

绘图


from pyecharts.charts import Line
import pyecharts.options as opts
from pyecharts.faker import Faker
import webbrowser

import math



def get_gap_rate(gap_day, dur):
    rate = math.sin(math.pi * 2 * float(gap_day)/dur)
    # return round(rate, 5)
    return rate


def get_month_rhythm(year, month):

    days = get_days_4month(year, month)
    print('-- days : ', days)  

    birthday = '1991-08-26' 

    tl_arr = []
    qx_arr = []
    zl_arr = []
    day_arr = []

    for i in range(days):
        # day = '{%d}-{%02d}-{%02d}'.format(year, month, i+1) 
        day = '%d-%02d-%02d'%(year, month, i+1) 

        gap = get_gap(birthday, day)
        print('-- ', day, gap)

        tl_circle, tl_day, qx_circle, qx_day, zl_circle, zl_day = get_rhythm(gap)
        # tl_arr.append(tl_day) 
        # qx_arr.append(qx_day) 
        # zl_arr.append(zl_day) 
        day_arr.append(str(i+1))

        tl_arr.append(get_gap_rate(tl_day, TL_DUR))
        qx_arr.append(get_gap_rate(qx_day, QX_DUR))
        zl_arr.append(get_gap_rate(zl_day, ZL_DUR))


    line4=(
        Line()
        .add_xaxis(day_arr)
        .add_yaxis('体力', tl_arr, is_smooth=True, is_symbol_show=False) 
        .add_yaxis('情绪', qx_arr, is_smooth=True, is_symbol_show=False)
        .add_yaxis('智力', zl_arr, is_smooth=True, is_symbol_show=False)

        .set_global_opts(title_opts=opts.TitleOpts(title=f'人体生物节律 {year}年{month}月\n生日:{birthday}'))
    )

    file_path = 'rhythm.html'
    line4.render(file_path)
    webbrowser.open("file://" + os.path.realpath(file_path))
 
year, month = 2023, 2
get_month_rhythm(year, month)

结果

请添加图片描述

是不是和该网站的效果比较接近呢?在这里插入图片描述

伊织 2023-02-20(一)

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
乘风的头像乘风管理团队
上一篇 2023年3月6日 上午8:51
下一篇 2023年3月6日 上午8:52

相关推荐