根据相关股票的涨跌幅数据(见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()