数据可视化之matplotlib库实战(一)

这篇博客主要介绍如何使用matplotlib进行数据可视化,包括基本的折线图绘制和子图操作。作者通过唐宇迪的机器学习课程学习,并提供了数据链接。文章中展示了如何创建多条折线图,并探讨了颜色的随机生成,但指出颜色区分不够明显。最后,作者分享了实战代码和最终效果。
摘要由CSDN通过智能技术生成

本篇主要内容来自于唐宇迪-机器学习课程的数据可视化章节,此文只做个人实操和理解用。

#折线图的绘制

# -*- coding: utf-8 -*-
import pandas as pd 
#首先还是照例导入文件
unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv',encoding = 'UTF-8') 
#我们看看该表的前十位数据,这是一个美国政府统计的48年一月以来的每月美国社会失业率。
unrate.head(10)
DATE	VALUE
0	1948-01-01	3.4
1	1948-02-01	3.8
2	1948-03-01	4.0
3	1948-04-01	3.9
4	1948-05-01	3.5
5	1948-06-01	3.6
6	1948-07-01	3.6
7	1948-08-01	3.9
8	1948-09-01	3.8
9	1948-10-01	3.7
#由于DATA列不是日期类型,我们先抓换成日期类型
unrate['DATE'] = pd.to_datetime(unrate['DATE'])

import matpplotlib.pyolot as plt # 导入画图库
first_year = unrate[0:12] #先切片第一年的数据
plt.plot(first_year['DATE'], first_year ['VALUE'])
plt.show() #在ipython环境下你需要加入这段代码才能看见图片

在这里插入图片描述

如图所示,X轴刻度标签混杂在一起非常不美观。我们需要做如下修改,随便加上各种标题使其完整。

plt.plot( first_year['DATE'], first_year ['VALUE'])
plt.xticks(rotation = 45) #X轴刻度标签,rotation代表旋转角度,我们旋转45度。
plt.xlabel('Month') # X轴标题
plt.ylabel('Unemployment Rate') #Y轴标题
plt.title('Monthly Unemployment Trends, 1948') #图表表图

在这里插入图片描述

这就是最基本的折线图的绘制,后续我们再挑战更高难度的图表,此次所用的数据在此网盘里:链接: https://pan.baidu.com/s/1mQOW-woQ2IBrdFP1zPxFQg 提取码: ipks。

子图操作

有时候我们需要在一张图表里插入多项子图来表达同一个数据,这时候就需要子图操作。

# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 fig = plt.figure()  #首先先创建个空白图形变量
 ax1 = fig.add_subplot(2,2,1)  #往这个空白图形变量添加子图,参数中的(2,2,1)分别代表
 这是一个2*2的图形矩阵,尾数1表示是第一张图。

在这里插入图片描述
这就是输出上文代码后的结果,只有第一张已建立的ax1显示在图表上,其余留白。

ax2 = fig.add_subplot(2,2,2)  #我们再在2号位置上加个图表
ax1.plot(np.random.randint(1,5,5), np.arange(5)) #在表一绘制随机点,大家还记得randint函数吗?前面两位1,5表示从大于等于1到小于五区间,尾数5表示任意取五个点
ax2.plot(np.arange(10)*3, np.arange(10))

在这里插入图片描述
接下来我们学习在一张图表里插入多条数据,还是原来那张图

ax3 = fig.add_subplot(2,2,3)
# 从之前的数据提取月份数据,创建新列
unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv',encoding = 'UTF-8')
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
unrate['Month'] = unrate['DATE'].dt.month
#再ax3绘制前两年的的每月分失业率折线图
ax3.plot(unrate[0:12]['Month'], unrate[0:12]['VALUE'], c = 'red')
ax3.plot(unrate[12:24]['Month'], unrate[12:24]['VALUE'], c = 'blue')

在这里插入图片描述
这样的话我们只能输出两年的美国失业率,为了输出更多的折线,我们考虑用for循环语句去绘制更多的折线。

fig = plt.figure(figuresize = (10, 6)
colors = ['red', 'blue', 'green', 'orange', 'black'] #颜色库
# ax3.plot(unrate[12:24]['Month'], unrate[12:24]['VALUE'], c = 'blue'),这是我们上面的一条折线的输出,我们要循环输出就要观察所需要变化的位置,主要就是颜色和行切片那。所以:
for i in range(5):
    start_index = 12*i
    end_index = 12 + 12*i
    plt.plot(unrate[start_index:end_index]['Month'],
             unrate[start_index:end_index]['VALUE'], c = colors[i])

在这里插入图片描述
自己附加作业:这里我们就得到了我们想要的多条折线图表,可是我们需要更多的折线怎么办,总不能一个个颜色往颜色库里填吧。想到之前颜色还可以用rgb表示,colors(x, y, z), 也就是说只要有三个随机参数我们就可以随机我们的颜色。那就动手去做吧,原先的架构不变,就是颜色库那进行改造。

import random #主要就是运用下random这个函数
fig = plt.figure(figuresize = (10, 6)  #建立一个新的图表
for i in range(10): #要绘制多少条折线,参数就在这里调
    x = random.uniform(0,1)
    y = random.uniform(0,1)
    z = random.uniform(0,1) #每循环一次就可以生成新的颜色参数,达到我们有多少次循环就有多少次颜色目的
    start_index = 12*i
    end_index = 12 + 12*i
    plt.plot(unrate[start_index:end_index]['Month'],
             unrate[start_index:end_index]['VALUE'], color = (x,y,z))

在这里插入图片描述
貌似颜色区分不怎么明显,哈哈,算了就当自己一个失败的尝试吧,主要对三原色的参数代表颜色的明亮程度还不怎么清楚,应该把random区间定位在亮色区比较好。接下来我们就进行修尾工作了,加入图例,轴标签标题之类的。

fig = plt.figure(figuresize = (10, 6)  
for i in range(10): 
	x = random.uniform(0,1)
	y = random.uniform(0,1)
	z = random.uniform(0,1) 
	start_index = 12*i
	end_index = 12 + 12*i
	label = str(1948 + i)  #加入标签,数据从1948年开始,不添加的话则会以列名为标签名
	plt.plot(unrate[start_index:end_index]['Month'],
             unrate[start_index:end_index]['VALUE'], color = (x,y,z), label = label)
plt.legend(loc = 'best') #加入图例,位置让python自动帮我们选择图表中留白部分,当然你也可以自己选定位置,具体参考文档help(plt.legend)

在这里插入图片描述
还是有点丑滴。最后放上自己实战的源代码和最后效果,作为本篇终结。


# -*- coding: utf-8 -*-
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt
import random
unrate = pd.read_csv(r'/Users/herenyi/Desktop/UNRATE.csv')
unrate['DATE'] = pd.to_datetime(unrate['DATE'])
unrate['Month'] = unrate['DATE'].dt.month
fig = plt.figure(figsize = (10, 6))
for i in range(10):
    x = random.uniform(0,1)
    y = random.uniform(0,1)
    z = random.uniform(0,1)
    start_index = 12*i
    end_index = 12 + 12*i
    label = str(1948 + i)  
    plt.plot(unrate[start_index:end_index]['Month'],
             unrate[start_index:end_index]['VALUE'], color = (x,y,z),label =label)
plt.legend(loc = 'best') 
plt.xlabel('Month, Integer')
plt.ylabel('Unemployment Rate, Percent')
plt.title('Monthly Unemployment Trends, 1948-1957')

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值