Python matplotlib画图

数据:
链接: https://pan.baidu.com/s/1XuDQqPq3O1zgHsia29qBnw 提取码: nrhv
这是阿拉斯加州SITKA地区2018年天气数据

绘制2018年最低最高气温图形:
code

# -*- coding:utf-8 -*-
import csv
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
from matplotlib.pyplot import MultipleLocator
from datetime import datetime
import pandas as pd

df = pd.read_csv("D:\python39\my\data\procrank.txt",delimiter="\s+")
df.to_csv("D:\python39\my\data\procrank.csv", encoding='utf-8', index=False)

filename = 'D:\python39\my\data\sitka_weather_2018_simple.csv'
with open(filename) as f:
    reader = csv.reader(f)
    header_row = next(reader)
    #print(header_row)
    dates,highs,lows = [],[],[]
    for row in reader:
        current_date = datetime.strptime(row[2],'%Y-%m-%d')
        high = int(row[5])
        highs.append(high)
        low = int(row[6])
        lows.append(low)
        dates.append(current_date)
    #print(highs)

    myfont = fm.FontProperties(fname=r'C:\Windows\Fonts\msyh.ttc')#设置字体
    #根据最高温度绘制图形
    plt.style.use('seaborn')
    fig, ax = plt.subplots()
    ax.plot(dates,highs,c='red')
    ax.plot(dates,lows, c='blue')

    #设置图形格式
    ax.set_title("2018年每日最高温度",fontproperties=myfont,fontsize=24)
    ax.set_xlabel('',fontproperties=myfont,fontsize=16)
    fig.autofmt_xdate()
    ax.set_ylabel("温度(F)",fontproperties=myfont,fontsize=16)
    ax.tick_params(axis='both',which='major',labelsize=16)

    #plt.savefig('D:\python39\my\data\F.png')#保存为png格式
    plt.show()

解析:
1.header_row = next(reader)#得到文件第一行
2.for row in reader:
high = int(row[5])
阅读器对象从其停留的地方往下读取csv文件 ,每次都自动返回当前位置所在的下一行。由于阅读器已经读取了文件头:header_row = next(reader),这个循环将从第二行开始
3.current_date = datetime.strptime(row[2],’%Y-%m-%d’)
#%Y-%m-%d格式需与表格一致,若表格显示2018/07/07,则需要写成%Y/%m/%d
4.设置图像字体:
myfont = fm.FontProperties(fname=r’C:\Windows\Fonts\msyh.ttc’)#设置字体
Fonts文件夹中字体名与显示的不一致,将字体文件复制粘贴到其他地方,可检查实际的文件名
结果
在这里插入图片描述

扩展

1.更新横纵坐标间距
有时候为了更放便于数据分析,想改变默认的坐标间隔,可使用以下方法:

	ax.set_ylabel("温度(F)",fontproperties=myfont,fontsize=16)
    ax.tick_params(axis='both',which='major',labelsize=16)

    #设置图形格式:横坐标2018/01/01~2018/12/31,间隔为30;纵坐标0~70,间隔为5
    
    x_major_locator = MultipleLocator(30)
    # 把x轴的刻度间隔设置为30,并存在变量里
    y_major_locator = MultipleLocator(5)
    # 把y轴的刻度间隔设置为5,并存在变量里
    ax = plt.gca()
    # ax为两条坐标轴的实例
    ax.xaxis.set_major_locator(x_major_locator)
    # 把x轴的主刻度设置为1的倍数
    ax.yaxis.set_major_locator(y_major_locator)
    plt.show()

更新后:
在这里插入图片描述
2.更新横纵坐标取值区间
发现上述表格上下左右拖拽,但无数据,是空白区域,为使图像可读性更强,使用限制横纵坐标的区间
方法:ax.set_ylim(起始,末尾),ax.set_xlim(起始,末尾)

 #设置图形格式:横坐标2017/12/28~2019/01/03,间隔为30;纵坐标0~70,间隔为5
 
    ax.set_ylim(10, 70)
    date_start = datetime(2017,12,28)
    date_end = datetime(2019, 1, 3)
    ax.set_xlim(date_start, date_end)
    
    x_major_locator = MultipleLocator(30)
    # 把x轴的刻度间隔设置为30,并存在变量里
    y_major_locator = MultipleLocator(5)
    # 把y轴的刻度间隔设置为5,并存在变量里
    ax = plt.gca()
    # ax为两条坐标轴的实例
    ax.xaxis.set_major_locator(x_major_locator)
    # 把x轴的主刻度设置为1的倍数
    ax.yaxis.set_major_locator(y_major_locator)

更改后不可拖拽
注意!!!!!

以上是基于python3.0实现的
转换到2.0时提示错误:ValueError: matplotlib display text must have all code points < 128 or use Unicode strings
这是由于包含中文字符,需要更改字符编码:在中文字符前加上u
ax.set_ylabel(u"温度(F)",fontproperties=myfont,fontsize=16)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值