欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python数据分析笔记—matplolib绘图笔记及示例

程序员文章站 2022-05-04 19:17:37
概念及环境matplolib用于绘图numpy处理数值型数据pandas处理数值型数据和字符串、列表等数据...

先记录小技巧:
pycharm中,鼠标点在一个方法上,ctrl+b,即转到该方法的源码,以找到使用方法。

概念及环境

使用意义:从一堆数据中找到或总结出需要的信息,帮助判断和决策
与web、爬虫、机器学习相结合
基本流程:提出问题->准备数据->分析数据->获得结论->成果可视化等其他操作
一般使用环境:conda(容易解决各种安装问题)

matplolib

重要的事情讲在前面

matplotlib用于绘图,可绘制的图形在matplotlib官网上进行查阅获取代码,更改变量即可。
打不开的话就用这个matplolib中文文档
以下笔记均以绘制折线图、散点图、条形图和直方图为例。

matplolib基本介绍

matplolib可以将数据可视化,直接用python执行,名字取材于matlab。

折线图基本要点

axis轴:坐标轴)
使用一般方法:
以折线图为例:

from matplotlib import pyplot as plt#模块导入
x = X#传递自变量
y = Y#传递应变量
plt.plot(x,y)#导入变量,并通过plot绘制折线图(不展示)
plt.show()#展示图形

此时显示的时一段折线图。
但是matplolib还有更多的设置,如
设置图片大小

fig=  plt.figure(figsize = (a, b), dpi = 80)`#a、b表示宽和高

保存到本地

plt.savefig('./name.svg')#./代表再当前路径下的文件,可以更改。使用.svg格式是矢量图格式,避免模糊。

描述图像信息
添加描述信息

plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.title('title')

调整刻度:(以x轴为例,y轴即把xtick改为ytick)
此处注意:更改刻度的疏密可用此处代码表示:_x = list(x)[shart, stop, step]#把x转化为列表,方便用[ ::]截取片段

调整图表:
绘制网格:在图像绘制后,加入代码plt.grid()
在调整x轴和y轴刻度时会直接调整网格。一般可以传入如alpha(透明度)等参数。

添加一条新的曲线:
直接再加入一条:plt.plot(x, y)
添加图例

plt.plot(x, y,label='label')
plt.legend(prop='my_font')
#除了legend更改字体使用prop以外,更改字体均使用fontproperties

以下两点待补充
标记特殊点
添加水印

折线图的小案例

假设要记录cathy和sarah两人11岁至30岁的旅行经历

from matplotlib import pyplot as plt
from matplotlib import font_manager


#my_font = font_manager.FontProperties('C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/BUSTER Regular.ttf')
my_font = font_manager.FontProperties(fname='C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/DuntonWriting.ttf')
x = range(11,31)
y = [1, 0, 1, 1, 2, 4, 3, 2, 3, 4, 4, 5, 6, 5, 4, 3, 3, 1, 1, 1]
y2 = [2, 0, 3, 5, 3, 2, 2, 1, 1, 1, 1, 3, 2, 5, 6, 3, 1, 2, 3, 0]
fig = plt.figure(figsize=(20,8),dpi=80)
xtick = []
for i in x:
    xtick += f'{i}'
plt.xticks(x, xtick,fontproperties=my_font)

plt.xlabel('age= ',fontproperties=my_font)
plt.ylabel('annual travel-times', fontproperties=my_font)
plt.title('travel-times between the age of 11 and 30',fontproperties=my_font)

plt.plot(x, y, color='cyan', label='Sarah',linewidth=3)#颜色可搜索颜色代码(十六进制)
plt.plot(x, y2, color='orange', label='Cathy')
plt.grid(alpha=0.5)

plt.legend(prop=my_font,loc=0)

plt.savefig('./test3.png')
plt.show()

结果:
Python数据分析笔记—matplolib绘图笔记及示例

散点图基本要点

基本同上,使用plt.scatter进行绘图,直接上案例:
北京3月和10月的气温散点图

from matplotlib import pyplot as plt
from matplotlib import font_manager


my_font = font_manager.FontProperties(fname='C:/Users/MI/AppData/Local/Microsoft/Windows/Fonts/C288-蔡云汉隶书书法字体.TTF')

x1 = range(1, 32)
#排版漂亮,两个图要分离开
x2 = range(51,82)
_x = list(x1) + list(x2)


plt.figure(figsize=(20, 8), dpi=80)
x_tick = []
for i in x1:
    x_tick += [f'March :day {i}']
for i in x2:
    x_tick += [f'October :day {i-50}']

plt.xticks(_x[::3], x_tick[::3], rotation=45, fontproperties=my_font)
plt.xlabel(f'temperature in March', fontproperties=my_font)
plt.ylabel(f'temperature in October', fontproperties=my_font)
plt.title(f'Temperature of two months in Beijing')


y1 = [11, 17, 16, 11, 12, 11, 12, 6, 6, 7, 8, 9, 12, 15, 14, 17, 18, 21, 16, 17, 20, 14, 15, 15, 15, 19, 21, 22, 22, 22, 23]
y2 = [26, 26, 28, 19, 21, 16, 16, 19, 18, 20,19,20, 21, 22, 13, 5, 13, 17, 10, 11, 17, 13, 13, 24, 12, 11, 13, 12, 13, 5, 6]

plt.scatter(x1, y1, label='March', color='blue')
plt.scatter(x2, y2, label='October',color='orange')

plt.legend(prop=my_font, loc=0)

plt.savefig('temp1.png')
plt.show()

Python数据分析笔记—matplolib绘图笔记及示例

条形图重点

(一般用于数据对比、数量/频率统计等)
2017年票房数据(因为字体这边有点问题,用f(n)表示电影名)

from matplotlib import pyplot as plt
from matplotlib import font_manager

plt.figure(figsize=(15,8),dpi=80)

my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf')
x=[]
#x = ['f1','速度与激情','功夫瑜伽',"西游降魔篇",'变形金刚5','摔跤吧爸爸','加勒比海盗','金刚','极限特工','生化危机','乘风破浪','生化危机','智取威虎山','大闹天竺','金刚狼','蜘蛛侠','悟空传','银河护卫队','轻声','木乃伊']
for i in range(1,21):
    x += [f'f{i}']
y = [56,27,17,16,15,13,11,11,11,11,10,10,8,7,7,7,6,6,6,6]

plt.ylabel(f'booking office')
plt.xlabel('film name')
plt.title('films\' bookong office in 2017')

plt.bar(x, y, color='#BA55D3',width=0.3)
plt.savefig('temp2.png')
plt.show()

Python数据分析笔记—matplolib绘图笔记及示例
但条形图中,通常还会有两种需求:横向条形图、多次条形图,以下给出解决方法及案例
横向条形图:

plt.barh(x,y)

但此时若写plt.barh(x,y,width=3)代码会出错,核查源码后发现barh()的参数如下:
barh(y, width, height=0.8, left=None, *, align=‘center’, **kwargs)
简单更改后结果如下:
Python数据分析笔记—matplolib绘图笔记及示例

多次条形图的重点在于紧邻的几条数据。
以三天中4部电影的票房对比为例:

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname='C:/Windows/Fonts/simhei.ttf')


_x = ['film1','film2','film3','film4']
#输入4部电影每天的票房
y3=[15746,312,4496,329]
y2=[12357,156,2045,168]
y1=[3458,399,2358,362]

#设置width时候保证其数值小于1/n(n为图中每一大块含有的条形图的数量)
#此处n表现为天数
#否则条形图们就会紧紧挤在一起
bar_width = 0.2

#通过使向右移动一个width的长度,设置紧贴的3列数据
x1 = list(range(len(_x)))
x2 = [i+bar_width for i in x1]
x3 = [j+bar_width for j in x2]

plt.bar(range(len(_x)),y1,width=bar_width,label='day1')
plt.bar(x2,y2,width=bar_width, label='day2')
plt.bar(x3,y3,width=bar_width, label='day3')

plt.xticks(x2,['film1','film2','film3','film4'])
plt.legend(loc=0)
plt.title('booking office of 4 films in 3 days')
plt.ylabel('booking office')
plt.xlabel('films')

plt.savefig('temp4.png')
plt.show()

输出结果:
Python数据分析笔记—matplolib绘图笔记及示例

直方图重点

直方图调用的函数是:

plt.hist(_list, num_bins)

_list代表需要统计的数据
num_bins代表组数(分组数量)
分组方面,一般规定数据在100以内时分5~12组
大于100时,n = 极差/组距,组距即每个小组的间隔
数据差距越大,组距应相应扩大
若组距不确定,可设置bins = list,传入一个数组。
若要改为频率直方图,输入以下代码:

plt.hist(_list,nub_bins,nomed=True)

案例:统计250部电影时长的分布情况
此处案例中由于y是随机产生的,因此不能保证(max(y)-min(y))//d是整数,因此数据条和网格不能重合,现实数据可以避免这个问题。

import random as rd
from matplotlib import pyplot as plt


#设置图形大小
plt.figure(figsize=(20,8),dpi=80)


#假设电影时长
y = []
for i in range(250):
    y.append(rd.randint(100,200))


#绘制直方图
d=5#组距
num = max(y)//d
plt.hist(y, num)


#设置x轴刻度
#注意添加步长(组距)
_x = [f'{i}min' for i in range(min(y), max(y)+d, d)]
plt.xticks(range(min(y), max(y)+d, d),_x, rotation=45)

#添加描述信息
plt.xlabel("the lenth of movies")
plt.ylabel('the number of movies')
plt.title('movie-numbers of different lenth')


plt.grid()
plt.show()
plt.savefig('temp5.png')

Python数据分析笔记—matplolib绘图笔记及示例注意:如果给出的数据是已经统计好的数据,则直接使用条形图来制作直方图,设置width=1(消除条形图之间的空隙),根据情况修改xticks即可。

本文地址:https://blog.csdn.net/Wkx107312395/article/details/107403930