IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 2021-08-29 使用matplotlib来绘制线图 -> 正文阅读

[Python知识库]2021-08-29 使用matplotlib来绘制线图

使用matplotlib来绘制线图 (绘制模拟投资的基金收益情况)

这个函数主要的功能就是将一个result通过图形更加直观的展示出来。

其中主要的知识点是1.子图布局(subplots),2.控制x轴上需要展示的刻度(set_xticks),以及对其的进一步改变(set_xticklabels),3.对图例位置的控制(legend)。
代码如下:

def draw_result(result,point=6,ylim=1):
#     result是模拟投资后产生的数据集,是一个字典,其中包含cost, worth, net_worth, ear, ear_ratio, optime, share等,对于涨卖跌买的结果,还含有cash
# point 是表明图中需要展示在x轴上刻度的数目,默认为6
#     ylim  是控制ear_ratio一图y坐标范围的上限
    result_len = len(result['ear_ratio']) # 获取数据长度,result中每个值的长度都是一样的,这里选ear_ratio
    point_to_disp = result_len if point > result_len else point
    x_ax = np.arange(result_len) # x轴上的数据
    sep = result_len/point_to_disp
    x_ax_index = np.array([math.floor(i*sep)-1 for i in range(1,point_to_disp+1)]) 

    fig,axes = plt.subplots(2,2,figsize=(18,12))
    ax =[]
    for i in axes:
        for j in i:
            ax.append(j)
     # 绘图的补充
    ax[3].set_ylim(-0.6,ylim)
    ax[0].plot(x_ax ,result['cost'],label='cost')
    # 绘图的主要部分
    for axe,content in zip(ax,['worth','net_worth','ear','ear_ratio']):
        axe.set_title(content)
        axe.plot(x_ax,result[content],label=content)
        axe.set_xticks(x_ax[x_ax_index])
        # look_time(inttime)这个函数是传入一个日期整数值,返回相应的日期字符串
        axe.set_xticklabels(np.array([look_time(i) for i in result['optime'][x_ax_index]]))
        axe.text(0,max(result[content]),'the last {}:{:.2f}'.format(content,result[content][-1]))
        axe.legend(ncol=2,loc=3,bbox_to_anchor=(0,1))
        # 绘图的补充
    ax[3].text(0,ylim*0.8,'the last {}:{:.2f}'.format('ear_ratio',result['ear_ratio'][-1]))
    ax[0].text(0,max(result['worth'])*0.9,'the last {}:{:.2f}'.format('cost',result['cost'][-1]))
    for i in [0,2,3]:
        ax[i].plot(x_ax ,np.zeros(result_len),ls='--')
    ax[1].plot(x_ax,np.ones(result_len),ls='--')

1. 子图布局

fig,axes = plt.subplots(2,2,figsize=(18,12))
# 表示创建一个画布,其中含有2x2的子图,画布的大小是18x12英寸

fig 是画布对象,axes是一个numpy.array对象。使用的时候可以直接这样

axes[0,0].plot(x,y) 
#左上角的图axes[1,0]是左下角的图,这个索引跟numpy.array是一样的

而我此处的用法是将这个2维的axes变成了一个一维的ax,这样做的目的是为了后面循环的时候可以直接和result中的数据一起进行一维的循环,减少代码数量。事实上对于需要绘制的四个图,我把重复的工作都放进了循环里,包括:设置标题,绘图,控制x刻度,添加图例和文本信息

    ax =[]
    for i in axes:
        for j in i:
            ax.append(j)

2. 绘制控制轴刻度

这部分分为控制刻度上显示的值,以及刻度的范围

        axe.plot(x_ax,result[content],label=content)
        axe.set_xticks(x_ax[x_ax_index])
        # look_time(inttime)这个函数是传入一个日期整数值,返回相应的日期字符串
        axe.set_xticklabels(np.array([look_time(i) for i in result['optime'][x_ax_index]]))
        #我希望能尽量均匀的选取6个点来展示,所以用了x_ax_index这个索引array,他是通过设定需要展示的刻度数(此处为6),根据数据长度,设定步长,计算出来的,所以展示出来的刻度会有些许不等距。

x_ax是一个numpy.arange生成的array对象,从0到result中值的长度,比如result[‘cost’]的长度为5,则x_ax为np.arange(5)。

x_ax_index是需要展示的x_ax的索引array对象,这是为了直接从x_ax中取需要展示值,又因为x_ax实际上又对应着一个整数类型的时间值,所以可以用这个索引来选取需要展示的时间值,通过一个look_time()函数,选取需要在x轴上展示的时间字符串。

3. 对图例位置的控制

axe.legend(ncol=2,loc=3,bbox_to_anchor=(0,1))

axe.legend()的参数:

ncol:控制图例展开成几列,因为默认情况下,所有图例都在一列。

loc:控制图例的展示位置,这里表示在左下角,实际上这儿配合上bbox_to_anchor这个参数,将图例在axe外部展示

bbox_to_anchor=(x,y):控制图例展示的位置,x,y均为在图中位置的比例,此处(0,1)表示在左上角

至于图例的内容,则是在plot(label=‘content’)的label参数来设置的。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 12:01:04  更:2021-08-30 12:03:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 11:51:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码