栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据分析matplotlib

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据分析matplotlib

绘制某种图表时,首先根据数据绘制出大体的轮廓,然后再根据需要进行细节的调整。

折线图基础代码
from matplotlib import pyplot as plt
x = range(2,11,2)
y = [2,3,4,5,6]
z = [3,4,5,6,7]
fig = plt.figure(figsize=(10,4),dpi=80) #figsize表示图片大小,dpi表示图片清晰程度

#图像线条的属性设置,颜色可以用颜色代码16进制
plt.plot(x,y,label="defeat",color="r",line,linewidth=5,alpha=0.7)
plt.plot(x,z,label="victory",color="yellow",line)

#添加网格,alpha表示透明度
plt.grid(alpha=0.5)


#设置x轴的刻度
xtick_labels = [i/2 for i in range(4,21)]#刻度之间相隔0.5,直接range(2,11,0.5)是不对的,0.5是float,
#可以用这种方式设置,注意除以2之后才是原来的刻度!
plt.xticks(xtick_labels)#给x轴刻度传什么值,就会显示什么

#设置y轴的刻度
plt.yticks(range(min(y),max(z)+1))

#添加图例,添加图例的前提是为不同的先设置好label
plt.legend(loc="upper left")


plt.savefig("./t1.png") #保存图片,相对路径(也可以保存为.svg的图片格式,表示可缩放的矢量图格式,放大不会有锯齿)

plt.show()

折线图应用
#10点到12点的温度变化折线图
from matplotlib import pyplot as plt
import random
#需要显示中文,加上这三行代码
import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

x = range(0,120)#range形成的是数组形式(1,2,3,...)
y = [random.randint(20,35) for i in range(120)]
fig = plt.figure(figsize=(10,4),dpi=80)
plt.plot(x,y,label="温度")

#调整x轴刻度
xtick_labels = ["10点{}分".format(i) for i in range(60)]
xtick_labels += ["11点{}分".format(i) for i in range(60)]
#[::3]取步长,使数字和字符串一一对应,数据的长度必须一样
plt.xticks(list(x)[::5],xtick_labels[::5],rotation=45)#rotation表示x轴刻度旋转的度数

#添加图的描述信息
plt.xlabel("时间")
plt.ylabel("温度(℃)")
plt.title("10点到12点的温度变化情况")

#添加网格
plt.grid(alpha=0.5)

#添加图例,前提是为线条设置好label属性,loc设置位置
plt.legend(loc="upper left")

plt.show()

绘制散点图基础代码
#绘制散点图
from matplotlib import pyplot as plt
import random
#需要显示中文,加上这三行代码
import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False

y_1 = [2,3,1,3,5,6,1,4,9,8,4,3,1,3,3,6,8,9,9,7,9,8,10,12,11,9,9,7,8,13,12]
y_4 = [12,13,11,13,15,16,11,14,19,18,14,13,11,13,13,16,18,19,19,17,19,18,20,22,21,19,19,17,18,23]
x_1 = range(1,32)
x_4 = range(51,81)

#设置图像大小
plt.figure(figsize=(10,4),dpi=80)

#绘制散点图
plt.scatter(x_1,y_1,label="一月份")
plt.scatter(x_4,y_4,label="三月份")

plt.plot(x_1,y_1,label="一月份")
plt.plot(x_4,y_4,label="三月份")

plt.legend()

#调整x轴刻度
_x = list(x_1)+list(x_4)
_xtick_labels = ["1月{}日".format(i) for i in x_1]
_xtick_labels += ["4月{}日".format(i) for i in x_4]
plt.xticks(_x[::3],_xtick_labels[::3],rotation=45)

#添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")

plt.show()

柱形图的绘制
#绘制柱形图
from matplotlib import pyplot as plt
import random
#需要显示中文,加上这三行代码
import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,4),dpi=80)

plt.title("各英雄在上中下路的胜率")
x = ["小乔","貂蝉","诸葛亮","嫦娥","女娲","王昭君","张良"]
y = [12,13,11,13,15,16,11]
z = [13,14,15,16,17,17,12]
p = [15,12,15,18,12,10,14]
wid = 0.2

#→右移一个(两个宽度)
x_y = list(range(len(x)))
x_z = [i+wid for i in x_y]
x_p = [i+wid*2 for i in x_y]

plt.bar(x_y,y,width=wid,label="对抗路")
plt.bar(x_z,z,width=wid,label="中路")
plt.bar(x_p,p,width=wid,label="发育路")

#调整x轴标签
plt.xticks(x_z,x,rotation=45)

plt.legend(loc="upper right")

plt.show()

条形图的绘制
#绘制条形图
from matplotlib import pyplot as plt
import random
#需要显示中文,加上这三行代码
import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,4),dpi=80)

plt.title("各英雄在上中下路的胜率")
x = ["小乔","貂蝉","诸葛亮","嫦娥","女娲","王昭君","张良"]
y = [12,13,11,13,15,16,11]
z = [13,14,15,16,17,17,12]
p = [15,12,15,18,12,10,14]
wid = 0.2

#→右移一个(两个高度)
x_y = list(range(len(x)))
x_z = [i+wid for i in x_y]
x_p = [i+wid*2 for i in x_y]

#!!!!!!与柱形图不同
plt.barh(x_y,y,height=wid,label="对抗路")
plt.barh(x_z,z,height=wid,label="中路")
plt.barh(x_p,p,height=wid,label="发育路")

#调整y轴标签!!!!!!!!!!与柱形图不同
plt.yticks(x_z,x,rotation=45)

plt.legend(loc="upper right")

plt.savefig("./t5.png")

plt.show()

 直方图的绘制

直方图应用:

用户年龄的分布状态

一段时间内,用户点击次数的分布状态

用户活跃时间的分布状态

直方图调整x轴刻度是一件很困难的事

#绘制直方图
from matplotlib import pyplot as plt
import random
#需要显示中文,加上这三行代码
import matplotlib.pyplot as plt  
plt.rcParams['font.sans-serif'] = [u'SimHei']
plt.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(10,4),dpi=80)

a = [12,13,11,13,15,16,21,16,43,56,58,35,44,34,23,14,19,18,24,23,21,23,23,26,18,19,19,17,19,18,20,22,21,19,19,17,18,23]

bin_width = 2#组距
#计算组数(max-min)//bin_width(整除)
num_bins = (max(a)-min(a))//bin_width

plt.hist(a,num_bins)

#设置x轴刻度
plt.xticks(list(range(min(a),max(a)+bin_width)))

plt.grid()

plt.savefig("./t6.png")
plt.show()

总结

根据具体的问题选择适合的图形,更多好看的图形见Examples — Matplotlib 3.5.2 documentation

更多可视化工具:echartsExamples - Apache ECharts

plotly比matplotlib更加简单,图形更加漂亮,兼容matplotlib和pandas,使用方法简单,照着文档写即可Plotly Python Graphing Library

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/931724.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号