matplotlib绘制多个类似的条形图(根据相关股票的涨跌幅数据生成2018年9月3日、9月5日至7日这四支股票涨跌幅的条形图)

根据相关股票的涨跌幅数据(见data.xlsx“第一题”工作表),生成2018年9月3日、9月5日至7日这四支股票涨跌幅的条形图,并且以2x2子图的方式呈现。最终呈现效果如图所示。

其中数据data.xlsx如下: 

 代码实现如下:(注意看注释)

# coding:utf-8
# 作者: 菜菜林妙妙
'''
    当时做的不好的总结:
        一开始获取数据十分不熟悉,程序获取数据出错,一直报错 然后解bug,花了大半节课才获取到第一题的数据,
        获取数据混乱主要是因为很多学了很多库,导致搞错了参数,因为有很多操作excel文件的库,因此后面我又认真专门学习了pandas的获取方法
        其实该题目画图不难,但是一开始的数据花了很多时间,导致后面慌乱,没有设计循环,而是使用冗余的代码
        该题目只要设置好循环变量就可以把题目使用精简的代码写出来
'''

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
if __name__ == "__main__":
    # 先设置字体,因为本电脑字体缺失
    plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']
    plt.rcParams['font.size'] = 12  # 字体大小
    plt.rcParams['axes.unicode_minus'] = False

#     读取文件:
    data = pd.read_excel('data.xlsx',sheet_name='第一题',usecols=[0,1,3,4,5],names=["公司","3日","5日","6日","7日"])
    print(data)
    # x标签和值
    x = np.arange(0,4)
    x_labels = list(data['公司'])
    print(x_labels)
    # 创建画布
    fig = plt.figure(figsize=(14,10))
    # y数据
    y = []
    # 颜色
    color = ['#9999ff','#77ff66','#3399ef','#171aee']
    # 日期
    dates = [3,5,6,7]
    for i in range(0,4):
        y = list(data.iloc[:,i+1]) # data.iloc[]里面:[行:列]  每次取出一列
        print(y)
    # 画布
        ax = fig.add_subplot(2,2,i+1)
        ax.bar(x,y,facecolor=color[i],edgecolor='white',width=0.4,label='2018年9月'+str(dates[i])+'日涨跌幅')    # label是图例标签,不可以放在legend里面
        # y轴的最大值的上限
        ax.set_ylim(-0.035,0.025)
        # 添加x便签
        ax.set_xticks(x)
        ax.set_xticklabels(x_labels)
    #  y轴标签
    # labelpad:此参数是距轴边界框的点距,包括刻度和刻度标签
        ax.set_ylabel('涨跌幅',rotation=0,labelpad=14)   # rotation=0表示标签水平放
    #  图例
        plt.legend(fontsize=12,bbox_to_anchor=(1.0,1.0))     # 图例的标签不可以放在legend里面  会显示不全,要放在画图的函数里面,如这里的bar
    #  格子线
        ax.grid(ls='-',linewidth=0.5)
    plt.savefig("条形图.png")
    plt.show()

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值