python可视化!(jupyter+pyecharts)

写在前面

最近在完成期末论文,要求自己画图,用https://hiplot.cn/画的图感觉总是差点意思,刚好当时在帮一个师姐一个python小脚本debug,突然想起之间师兄讲过的pyechart包,遂开始磕磕绊绊的学习。

下载

我是直接在VS code中使用jupyter插件的,直接在终端中输入

pip install ptecharts

如果使用网页链接jupyter的话也可以直接在cmd中安装,代码同上

pyecharts

注:以下只是我自己学习的分享,想要知道更多关于pyecharts可以在网上公开的文档中搜索

线图(目前只学到了这)

数据处理

示例数据
在这里插入图片描述

将数据转换格式读入变量中

# 插入pandas、numpy数组与pyecharts包
import pandas as pd
import numpy as np
# 读取数据
with open("./draw.txt","r") as f:
    data = f.readlines()
dataline = {}
i = 0
# 提取x轴与系列名称
x_name=""
series_name=[]
draw_xaxis = []
for line in data:
    field = line.strip().split("\t")
    if(i == 0):
        x_name = field[0]
        series_name=(field[1:8])
    else:
        draw_xaxis.append(field[0])
    i = i+1 
print (x_name)
# 提取每个系列的数据
## ==将表格转换为DataFrame格式 ==,非常重要
dataframe = pd.read_excel(io='./draw.xlsx') 
# 将列表转换为元组(列表不为哈希对象,不可做为字典的键)
#这里我是准备了两个相同的文件,一个txt格式,一个xlsx文件,肯定有更好的方法,但我精力有限,懒得回去写了
data = {}
for i in range(len(series_name)):
    a = series_name[i]
    data[a] = dataframe[a]

如此我们就得到了x轴的标签以及各个系列的数据,这部分不是重点,不再赘述,热身结束

绘图
  1. 导入pyechart的line类与options模块,如果有需要还可以导入主题类
from pyecharts.charts import Line             # 导入 Line 类
from pyecharts import options as opts         # 导入 options 模块并给其取一个别名 opts
from pyecharts.globals import ThemeType       # 导入 ThemeType 类型
  1. 创建实例
    值得提到的是,pyecharts的配置项分为全局配置项与局部配置项,关于坐标轴的(网格、刻度、值)或者全图的设置都应该在全局配置项中设置好,系列的作图则应该在局部变量中配置好,比如
line = (
    Line()
    # 全局配置项
    .set_global_opts(
        # 设置标题属性
        title_opts=opts.TitleOpts(
            title="苦瓜发芽率",
    ),
        # 设置 x 轴属性
        xaxis_opts=opts.AxisOpts(
            name="天数",
        ),
        # 设置 y 轴属性
        yaxis_opts=opts.AxisOpts(
            name="发芽率",
        ),
    )
    # 局部配置项,添加 x、y 轴数据
    .add_xaxis(draw_xaxis)
    .add_yaxis('CK',data['CK'])
    .add_yaxis('T5',data['T5'])
    .add_yaxis('T10',data['T10'])
    .add_yaxis('T15',data['T15'])
    .add_yaxis('T30',data['T30'])
    .add_yaxis('T45',data['T45'])
    .add_yaxis('T60',data['T60'])
)
line.render_notebook()

跑出来试一下
在这里插入图片描述
嗯,果然是异常的乱七八糟,可以看到至少有两个问题要解决,第一个是这么长的数字肯定是不能出现在图片上的,第二个是网格也不适合出现在我们的图表中。
对此可以用一些自带的方法解决

# 在add_yaxis方法中label_opts可以指定系列标签的属性,使用is_show=False选项可以取消标签显示
# 网格的取消比较复杂,我们要先隐藏所有刻度线,xaxis_opts中splitline_opts可以指定刻度线的属性,
# 使用is_show=False选项可以取消显示
line = (
    Line()
    # 全局设置
    .set_global_opts(
        # 设置标题属性
        title_opts=opts.TitleOpts(
            title="苦瓜发芽率",
    ),
        # 设置 x 轴属性
        xaxis_opts=opts.AxisOpts(
            name="天数",
            splitline_opts=opts.SplitLineOpts(is_show=False), # 取消刻度线
        ),
        # 设置 y 轴属性
        yaxis_opts=opts.AxisOpts(
            name="发芽率",
            splitline_opts=opts.SplitLineOpts(is_show=False),
        ),
    )
    # 添加 x、y 轴数据
    .add_xaxis(draw_xaxis)
    .add_yaxis('CK',data['CK'],label_opts=opts.LabelOpts(is_show=False)) # 取消标签展示
    .add_yaxis('T5',data['T5'],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('T10',data['T10'],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('T15',data['T15'],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('T30',data['T30'],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('T45',data['T45'],label_opts=opts.LabelOpts(is_show=False))
    .add_yaxis('T60',data['T60'],label_opts=opts.LabelOpts(is_show=False))
)
line.render_notebook()

看一下结果加粗样式
嗯?y轴呢?因为之前的y轴是由刻度线组成的,刻度线被我们删除,自然就没有了,此时我们要打开y轴,就可以了

yaxis_opts=opts.AxisOpts(
            name="发芽率",
            splitline_opts=opts.SplitLineOpts(is_show=False),
            axisline_opts=opts.AxisLineOpts(
                is_show=True # 显示y轴
            )
        ),

在这里插入图片描述

  1. 缝缝补补
    看来图已经基本满足我们的要求,但是还不够好,我们随便看一篇论文的折线图,可以发现有以下几个特点
    1. 白底黑字
    2. 喜欢用不同的图形当图例
    3. 标题更清楚
      在这里插入图片描述
      Salicylic acid treatment delayed the browning development in the pericarp of fresh longan by regulating the metabolisms of ROS and membrane lipid(不知道怎么删水印,放出原文链接,如有侵权请联系我)
      如何画的像一点呢
      那么就需要扩展我们使用的函数了,更多函数可以参考pyecharts文档
      这里主要是以下几种
标题字号字体
# title_opts中
title_textstyle_opts=opts.TextStyleOpts(
                color='black',                  # 标题颜色,可以用英文指定,也可以用字符串
                font_weight='bold',             # 标题加粗,’bold‘加粗
                font_size='20'                  # 标题字号
            )
# xaxic_opts、yaxic_opts 中
name_textstyle_opts=opts.TextStyleOpts(
                color='black',
                font_weight='bold',
                font_size='15',
                font_family='Microsoft YaHei' # 字体
            ),
# 系列变量中
symbol='arrow', # 图例类型,自带类型 'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow', 'none' 8种
symbol_size=8, # 图例大小
color='black' 
背景

这里我们可以采用初始化变量

line = (
    Line(
        init_opts=opts.InitOpts(height="600px", # 图宽
        bg_color="white") # 背景颜色
    )
    .set_global_opts(...)
坐标轴颜色

与显示y轴的函数一致

axisline_opts=opts.AxisLineOpts(
               is_show=True,
               linestyle_opts=opts.LineStyleOpts(color='black')
           )

这样,我们完成了坐标轴颜色与标题的优化,采用了不同的图例表示不同系列,将他们整合到一段代码中

from pyecharts.charts import Line             # 导入 Line 类
from pyecharts import options as opts         # 导入 options 模块并给其取一个别名 opts
from pyecharts.globals import ThemeType       # 导入 ThemeType 类型

model_data=[0,0.20,0.40,0.60,0.80,1.00]        # 设置数据

# 创建实例并设置初始属性
line = (
   Line(
       init_opts=opts.InitOpts(height="600px",bg_color="white")
   )
   
   # 全局设置
   .set_global_opts(
   
       # 设置标题属性
       title_opts=opts.TitleOpts(
           title="苦瓜发芽率",
           pos_left="45%",                    # 标题左对齐的位置
           title_textstyle_opts=opts.TextStyleOpts(
               color='black',                  # 标题颜色
               font_weight='bold',             # 标题加粗
               font_size='20'                  # 标题字号
           )
       ),
       
       # 设置 x 轴属性
       xaxis_opts=opts.AxisOpts(
           name="天数",
           is_show=True,
           boundary_gap=0,
           name_gap=30,
           splitline_opts=opts.SplitLineOpts(is_show=False),
           name_location='center',
           axisline_opts=opts.AxisLineOpts(
               linestyle_opts=opts.LineStyleOpts(color='black')
           ),
           name_textstyle_opts=opts.TextStyleOpts(
               color='black',
               font_weight='bold',
               font_size='15',
               font_family='Microsoft YaHei'
           ),
       ),
       
       # 设置 y 轴属性
       yaxis_opts=opts.AxisOpts(
           name="发芽率",
           is_show=True,
           type_="value",
           is_scale=True,
           boundary_gap=0,
           name_location='center',
           name_gap=30,
           name_textstyle_opts=opts.TextStyleOpts(
               color='black',
               font_weight='bold',
               font_size='15',
               font_family='Microsoft YaHei'
           ),
           splitline_opts=opts.SplitLineOpts(is_show=False),
           axistick_opts=opts.AxisTickOpts(is_align_with_label=True),
           axisline_opts=opts.AxisLineOpts(
               is_show=True,
               linestyle_opts=opts.LineStyleOpts(color='black')
           )
       ),
       
       # 设置图例属性
       legend_opts=opts.LegendOpts(
           orient='vertical',
           pos_right=20,
           pos_top='40%'
       ),
   )
   
   # 添加 x、y 轴数据
   .add_xaxis(draw_xaxis)
   .add_yaxis('CK',
              data['CK'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='triangle',
              symbol_size=8,
              color='black')
   .add_yaxis('T5',
              data['T5'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='rect',
              symbol_size=10,
              color='black')
   .add_yaxis('T10',
              data['T10'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='diamond',
              symbol_size=10,
              color='black')
   .add_yaxis('T15',
              data['T15'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='circle',
              symbol_size=8,
              color='black')
   .add_yaxis('T30',
              data['T30'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='roundRect',
              color='black',
              symbol_size=8)
   .add_yaxis('T45',
              data['T45'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol='arrow',
              symbol_size=8,
              color='black')
   .add_yaxis('T60',
              data['T60'],
              label_opts=opts.LabelOpts(is_show=False),
              symbol_size=8,
              color='black')
)

# 渲染图表
line.render_notebook()
# 保存到指定文件
line.render("page1.html")

肯定有更短的代码可以实现,但是我还没研究出来…

回车!
在这里插入图片描述
有模有样地!

编者按

本篇文章只是作为我学习记录的分享,本人不是计科专业的人,只是喜欢玩一下未知的东西。已经尽量勘误(不懂得太多了),如果还是有错,请多多见谅,希望没有耽误你。不过现在gpt这么厉害,看这些的人会越来越少吧,多谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值