数据分析是用适当的方法对收集的大量数据进行分析,帮助作出判断,以便采取适当行动。

matplotlib

最流行的python底层绘图库,主要做数据可视化图表。

1,能将数据进行可视化,更直观的呈现。

2,使数据更加客观,更具说服力。

折线图:以折线的上升或下降来表示统计数据的增减变化的统计图。

特点:能够显示数据的变化趋势,反映事物的变化情况。(变化)

直方图:由一系列高度不等的纵向条纹或线段表示数据的分布的情况。一般用横轴表示数据范围,纵轴表示分布情况。

特点:绘制连续性的数据,展示一组或者多组数据的分布状况(统计)

条形图:排列在工作表的列或行中数据可以绘制条形图中。

特点:绘制离散的数据,能够一眼看出各个数据的大小,比较数据之间的差别(统计)

散点图:用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。

特点:判断变量之间是否存在数量关联趋势,展示离群点(分布规律)

折线图

from matplotlib import pyplot as plt
import random
# 数据在x轴的位置,是一个可迭代的对象
_x=range(2,23,2)
# 数据在y轴的位置,是一个可迭代的对象
_y=[round(random.uniform(1,100),2) for _ in range(2,23,2)]
print(_x)
print(_y)

# figure 设置图片的大小 dpi设置图片的清晰度 dot per inch
fig=plt.figure(figsize=(20,8),dpi=80)

plt.plot(_x,_y)  #传入x和y,绘制折线图

# 设置x轴的刻度
#plt.xticks([i/2 for i in range(1,50)][::3])
plt.xticks(_x)
# 设置y轴的刻度
plt.yticks(range(int(min(_y)),int(max(_y))+1,5))

# 保存图片
plt.savefig('./temperature.jpg')

# 显示图片
plt.show()
import matplotlib
from matplotlib import pyplot as plt
import random

# 方法一:给matplotlib添加支持的字体,针对本ipynb文件临时的设置。
# font={
#     "family":"SimHei",
#     "weight":"bold",
#     "size":10
# }
#matplotlib.rc("font",**font)

# 方法二:通过pyplot的字典rcParams设置参数,针对本.ipynb文件临时的设置。 推荐
plt.rcParams['font.sans-serif']=['SimHei'] # 替换sans-serif字体
plt.rcParams['axes.unicode_minus']=False  # 解决坐标轴负数的负号显示问题

# 方法三:设置自定义字体(局部),只对相应设置的方法有效
# from matplotlib.font_manager import FontProperties
# 这里是将windows中自带的字体注入到matplotlib字体库
# font=FontProperties(fname=r'C:\Windows\Fonts\simsun.ttc',size=12)


_x=range(0,120)
_y=[random.uniform(20,35) for _ in range(120)]
_y1=[random.uniform(20,35) for _ in range(120)]

# 图例设置样式
"""
color='r # 线条颜色
linestyle='--' # 线条风格
linewidth=5 # 线条粗细
alpha=0.5 # 透明度
"""
plt.plot(_x,_y,label='北京',linestyle='--')
plt.plot(_x,_y1,label='上海',linestyle=':')
# 设置x轴显示的内容 与x轴的刻度是一一对应的,如果显示密集,可以调整步长,rotation 设置显示内容的旋转角度,避免重叠
_x_labels=['1{0}点{1}'.format(i//60,i%60) for i in range(120)]
plt.xticks(list(_x)[::5],_x_labels[::5],rotation=45)

# 添加描述信息
plt.xlabel('时间')
plt.ylabel('温度(度)')
plt.title('温度随时间变化图')

plt.legend(loc='upper right')
# 设置网格 alpha:透明度 
plt.grid(alpha=0.4,linestyle='--')
plt.show()

1,绘制折线图:plt.plot

2,设置图片的大小和分辨率:plt.figure

3,保存绘制的图片:plt.savefig

4,设置xy轴上的刻度和字符串(xticks)

5,解决刻度稀疏和密集的问题(xticks)

6,设置标题xy轴的label(title,xlabel,ylabel)

7,设置字体(font_manager.fontProperties,matplotlib.rc)

8,在一个图上绘制多个图形(plt多次plot即可)

9,为不同的图形添加图例(legend)

import matplotlib
from matplotlib import pyplot as plt
import random
# 设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

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

x=range(1,31)
x1=[i+40 for i in x]
y=[10,12,11,10,13,14,13,15,17,18,19,20,18,19,17,19,22,15,18,17,19,16,14,24,27,30,31,31,30,32]
y1=[32, 30, 31, 31, 30, 27, 24, 14, 16, 19, 17, 18, 15, 22, 19, 17, 19, 18, 20, 19, 18, 17, 15, 13, 14, 13, 10, 11, 12, 10]

# 散点图
plt.scatter(x,y,label='3月份',color='yellow')
plt.scatter(x1,y1,label='10月份',color='red')

# 设置x轴刻度
x_lab=['{0}月{1}日'.format(3,i) for i in x]
x1_lab=['{0}月{1}日'.format(10,i-40) for i in x1]
x_tick=list(x)+x1
x_label=x_lab+x1_lab
plt.xticks(x_tick,x_label,rotation=45)
#设置y轴刻度
plt.yticks(range(min(y),max(y)+1))

#设置描述信息
plt.xlabel('日期')
plt.ylabel('温度')
plt.title('北京天气情况')

#设置网格
plt.grid(alpha=0.3)
# 设置图例
plt.legend(loc='upper left')
plt.show()

条形图

from matplotlib import pyplot as plt
import matplotlib
# 设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

film=['年会不能停','金手指','潜行','三大队','天降大任','海王2:失落的王国','一闪一闪亮星星','非诚勿扰3','舒克贝塔:五角飞碟','孤军']
box_office=[13,15,10,8,7,19,6,3,7,2]

# 设置图形大小
plt.figure(figsize=(20,8),dpi=80)
#绘制条形图
plt.bar(range(len(film)),box_office,width=0.1)
plt.xticks(range(len(film)),film,rotation=45)

# 描述信息
plt.xlabel('电影名称')
plt.ylabel('电影票房')
plt.title('近期电影票房')


plt.show()

其中横向条形图使用plt.barh()

下面是显示多个条形图

from matplotlib import pyplot as plt
import matplotlib

# 设置字体
matplotlib.rcParams['font.sans-serif']=['SimHei']
matplotlib.rcParams['axes.unicode_minus']=False

film=['年会不能停','金手指','潜行','三大队','天降大任']
box_office_1=[2,1,3,1,1]
box_office_2=[3,2,2,3,1]
box_office_3=[4,1,1,4,2]

bar_width=0.2
x_1=list(range(len(film)))
x_2=[i+bar_width for i in x_1]
x_3=[i+bar_width*2 for i in x_1]

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

# 条形图 width 设置长条的宽度,默认为0.8
plt.bar(x_1,box_office_1,width=bar_width,label='1月1日')
plt.bar(x_2,box_office_2,width=bar_width,label='1月2日')
plt.bar(x_3,box_office_3,width=bar_width,label='1月3日')

# 通过设置x轴的刻度实现字符与字符串对应
plt.xticks(x_2,film)

# 设置描述信息
plt.xlabel('日期')
plt.ylabel('电影票房')
plt.title('三天电影票房')

plt.legend(loc='upper right')
plt.show()

直方图

from matplotlib import pyplot as plt
import random

y=[random.randint(100,300) for _ in range(100)]
#y=[230, 117, 298, 290, 283, 174, 227, 283, 164, 178, 278, 251, 231, 283, 237, 168, 225, 142, 111, 159, 277, 107, 108, 251, 161, 131, 294, 277, 271, 102, 100, 290, 203, 297, 196, 173, 258, 233, 300, 105, 284, 297, 231, 235, 279, 154, 142, 238, 184, 200, 201, 230, 121, 281, 245, 297, 141, 167, 283, 113, 214, 247, 194, 133, 262, 273, 177, 273, 143, 197, 279, 256, 182, 250, 269, 129, 290, 284, 181, 249, 113, 245, 162, 165, 291, 289, 243, 149, 101, 160, 176, 165, 192, 241, 279, 283, 234, 261, 196, 119]
print(y)
print(max(y),min(y),max(y)-min(y))
# 组距
d=10
# 组数
bins=(max(y)-min(y))//d
# 设置图片大小
plt.figure(figsize=(20,8),dpi=80)
# 绘制直方图
plt.hist(y,bins,density=True)
plt.xticks(range(min(y),max(y)+d,d))
# 网格
plt.grid(alpha=0.4)
plt.show()

 

 posted on 2024-01-06 22:31  会飞的金鱼  阅读(23)  评论(0)    收藏  举报