python用matplotlib画图例子(2)

背景:

用python的matplotlib的api画沪深300在2017年的走势图,并且标识出全年最低价及国庆节。(数据来源:天软科技)

代码

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime 
"""
数据格式(2017沪深300.CSV):
date    HS300
2017/1/3    3342.2272
2017/1/4    3368.3117
2017/1/5    3367.7892
………………
"""
filepath = 'C:\\Users\\tinysoft\\Desktop\\2017沪深300.CSV'
data = pd.read_csv(filepath,index_col=0,parse_dates = True)

hs300 = data['HS300']


fig = plt.figure()
ax = fig.add_subplot(111)

hs300.plot(ax=ax,style='r')

"""
设置标注:
    日期
    备注文本
    颜色
"""
day_label = [
    (datetime(2017,10,1),'National Day','r'),#国庆节
    (hs300.idxmin(),"min",'g') #2017年最低
    ]  

for day,text,color in day_label:
    label = "{0}\n{1}\n{2}".format(day.date(),hs300.asof(day),text)
    ax.annotate(label,
                xy = (day,hs300.asof(day)+10),#数据位置
                xytext = (day,hs300.asof(day)+150),#字体位置
                arrowprops = dict(facecolor=color),#箭头颜色
                horizontalalignment='left',#水平对齐方式
                verticalalignment='top')#垂直对齐方式

ax.set_xlim([datetime(2017,1,1),datetime(2017,12,31)])

ax.set_ylabel('$Close$')
ax.set_xlabel('$SH000300$')
ax.set_title('$In\ 2017, the\ SH000300\ charts$')

plt.show()

结果

这里写图片描述

主要是为了写个代码,以后用得着时可以直接调用,文件里的类直接继承QWidget,可以作为部件放入Layout中,省的以后还要麻烦重复的写代码。本人气象行业,会用到地图叠加风羽。 ---------- 主要实现了以下功能: 1. 绘制正常的折线或散点图(可以多条折线) 2. 绘制色斑图(等高线图) 3. 将数显示为图片(主要是自己要用于卫星云图显示) 4. 利用basemap,在地图地图上添加风羽(风杆) ---------- 暂时先实现这些功能,方便再写界面的时候直接调用。basemap没有python3.6版本的,所以用的是非官方包。 文件说明: 一、总体说明 A、类 文件里分为两个类:PlotWidget和PlotGeoWidget文件里分为两个类:```PlotWidget```和```PlotGeoWidget``` B、用到的库 1、matplotlib(2.0.2) 2、PyQt5(5.6) 3、basement(第三方非官方包) 4、numpy(1.14.5) 5、math(python自带) 二、PlotWidget类 A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout中作为一个普通部件 B、方法 1、plot_lines 功能:绘制线型图像(可多条曲线) ```def plot_lines(self, x_data, y_data, xlim=None, ylim=None, linestyle=['-'], linewidth=[2], linecolor=['black'], xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20, x_name=None, y_name=None, title=None, label=[None], label_loc='upper right')``` 参数解释: x_data、y_data: 要画的数据 必须在数据外面再套一个[],应为可能会容纳多数据 例如只有一数据[1,2,3,4,5],也需要在外面加上[]变成[[1,2,3,4,5]] xlim、ylim: 坐标轴范围,元类型 例如:(0,100) linestyle、linewidth、linecolor: 线型线宽线色,列表 列表里每个元素都是按照matplotlib的线型线宽线色来表示 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 例如:[0,10,20,30] 代表在只显示10 20 30的刻度 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 前提是必须有xticks、yticks 例如:当xticks=[0,10,20,30]时,xlabels=['x', 'xx', 'xxx', 'xxxx']代表在0 10 20 30 刻度处显示'x', 'xx', 'xxx', 'xxxx'文字 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 x_name、y_name: 坐标轴标注 title: 图片题名 label: 图注,列表类型 label_loc: 图注位置,按照matplotlib图注规范 2、plot_contour 功能:画等值线图 ```def plot_contour(self, x_data, y_data, val, title=None, x_name=None, y_name=None, xticks=None, xlabels=None, x_labels_rotation=0, x_labels_fontsize=20, yticks=None, ylabels=None, y_labels_rotation=0, y_labels_fontsize=20)``` 参数解释: x_data、y_data、val: 要画的数据(x,y,z值) title: 图片题名 x_name、y_name: 坐标轴标注 xticks、yticks: 坐标轴上要显示的刻度位置,列表类型 xlabels、ylabels: 坐标轴上显示刻度位置要显示的文字,列表类型 x_labels_rotation、x_labels_fontsize、y_labels_rotation、y_labels_fontsize: 坐标轴上文字旋转角度和文字大小 3、plot_digital_image 功能:显示数字图像,如云图、照片等,但是需要先将图片转为数 ```def plot_digital_image(self, img)``` 参数解释: img: 图片的数 三、PlotGeoWidget A、描述 该类作为一个独立的QWidget部件,可以直接放入Layout中作为一个普通部件 B、方法 1、map_wind 功能:显示本场周边地区地图,在地图上画出风杆 ```def map_wind(self, lon, lat, spe, dir)``` 参数解释: lon、lat: 经纬度,以小数表示 spe、dir: 风速风向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值