数据分析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",linestyle=":",linewidth=5,alpha=0.7)
plt.plot(x,z,label="victory",color="yellow",linestyle="--")

#添加网格,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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值