matplolib是一个python的绘图模块,功能非常的强大。这里是matplotlib的官网:http://matplotlib.org/
首先在我的例子中,需要导入以下:
from matplotlib.font_manager import FontProperties
import matplotlib as mpl
import datetime
import pandas as pd
import matplotlib.dates as mdate
os_style = os.name
if os_style is 'posix' : #在linux里,不使用以下语句可能会运行错误
import matplotlib
matplotlib.use("Pdf")
###import matplotlib.pyplot as plt
在matplotlib里字体设置如下:
# 用来正常显示中文标签
mpl.rcParams['font.sans-serif'] = ['SimHei']
#读取字体文件
#font = FontProperties(fname=r"C:\\WINDOWS\\Fonts\\simsun.ttc", size=14)
#上述两个操作都可以解决中文显示的问题
figure = plt.figure(figsize=(6, 6)) #设置一个6*6大小的画布
figure.autofmt_xdate() #当x轴太拥挤的时候可以让他自适应
plt.title("曲线图",color="blue")#设置画布抬头,颜色是蓝色
ax = figure.add_subplot(111) #111意思是设置画布为1行1列的图表,ax为从左到右从上到下第一块图表。这个功能可以在一张图表中显示多张图标
mpl.rc('xtick', labelsize=10) # 设置坐标轴刻度显示大小
mpl.rc('ytick', labelsize=10) #设置y刻度大小
#ax.set_xticklabels(labels=label_list, fontproperties=font, rotation=12)#设置x轴刻度字体为font
plt.xlabel('xlabel',color="gray")#设置X轴标注为xlabel,颜色灰色
plt.ylabel("ylabel",color="gray")
设置X轴参数为时间:
在实际中,我们经常会绘制x轴为时间的图表,这种图表需要对x轴进行专门的设置才可以实现
#设置ax的图表中x轴为 时间格式的 月-日
ax.xaxis.set_major_formatter(mdate.DateFormatter('%m-%d'))
# 设置X轴的刻度是1900年1月1日到1901年1月1日刚好一年,间隔为20天一个刻度,因为1900年的时间值为0,所以使用这个可以忽略年份。
plt.xticks(pd.date_range(start='19000101', end='19010101', freq="20D"))
#x轴刻度倾斜,可以防止太拥挤
plt.xticks(rotation=75)
设置好了x轴的参数,接下来需要传入x,y的值:
#data_list 是一个字典列表。
#data_list[date]是一个格式为年/月/日的字符串
#data_list[price]是一个数值
x=[];y=[]#定义两个列表
for item in data_list: #逐年取出单年所有信息
if "02/29" not in item["date"]:#这个是为了忽略闰年多的一天,不然无法在同一张表里显示闰年和非闰年的数值
date = item["date"][5:] # 舍弃年份,只取字符串第五位开始后的数据,取出效果是 月/日
y.append(item["price"]) #价格数值加入y列表
x.append(datetime.datetime.strptime(date, "%m/%d"))
#datetime.datetime.strptime(date, "%m/%d")函数可以将字符串转化成时间戳,这里只有月份和日,所以会直接转化成默认的1900年x月x日,这样就可以直接跟x轴上的数值对应上
设置双y轴
#设置双坐标轴,右侧Y轴
ax2=ax.twinx()
将x,y列表显示在图表上:
#将x,y传入图标显示,曲线名称为x年价格,这里也可以不设置曲线名称,但是当你需要在一个图表上显示多条曲线的时候,需要用label来显示和区分
plt.plot(x, y,label="2015年价格")
#如果要显示第二个曲线,那就直接
plt.plot(x1, y1,label="2016年价格")
上述完成你还需要以下步骤来显示图表上
legend = ax.legend(shadow=True)
plt.legend() #显示曲线标注,就是上面的2015年价格,2016年价格
plt.show()#显示图标