2021-08-01

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


什么是matplotlib

matplotlib:最流行的Python底层绘图库,主要做数据可视化图表,名字取材于MATLAB,模仿MATLAB构建


matplotlib绘制简单折线图

from matplotlib import pyplot as plt
fig=plt.figure(figsize=(20,8),dpi=80)#宽20 高8
#figure图形图标的意思,在这里指的就是我们画的图
#通过实例化一个figure并且传递参数,能够在后台自动使用该fgure实例
# 在图像模糊的时候可以传入dpi参数,让图片更加清晰
x=range(2,26,2)#数据在X轴的位置,是一个可迭代对象
y=[15,13,14,5,17,20,25,26,26,22,18,15]#数据在y轴的位置,是一个可迭代对象
#设置x轴的刻度
plt.xticks(x)
#设置y轴的刻度
plt.yticks(range(min(y),max(y)+1))
#绘图
plt.plot(x,y)#传入X和y,通过plot绘制出折线图
#绘制了图形后保存
#plt.savefig("./sig_size.png")
#展示图形
plt.show()#在执行程序的时候展示图形

matplotlib绘制气温折线图

代码如下(示例):

import random
import matplotlib
from matplotlib import pyplot as plt
###第二种改字体方式
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc",size=15)#这个地方输入字体的路径,特别注意,不要直接复制路径,容易出错,手动输入才行
###

x=range(0,120)
y=[random.randint(20,35) for i in range(120)]


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

plt.plot(x,y)
#调整x轴的刻度
#_x=list(x)[::3]
_xtick_labels=["10点{}分".format(i) for i in range(60)]
_xtick_labels+=["11点{}分".format(i) for i in range(60)]
#取步长,数字和字符串一一对应,数据的长度一样,只有列表才能取步长
plt.xticks(list(x)[::3],_xtick_labels[::3],rotation=45,fontproperties=my_font)#rotation表示旋转90度

#添加描述信息,中文会没显示,所以要设置字体
plt.xlabel("时间",fontproperties=my_font)#x轴的表示
plt.ylabel("温度 单位()",fontproperties=my_font)#y轴的表示
plt.title("10点到12点每分钟的气温变化情况",fontproperties=my_font)#整个图的表示

plt.show()



...
#这种方法可以改字体但有时没效果
# font = {'family' : 'MicroSoft YaHei',
#               'weight' : 'bold',
#               'size'   : 'larger'}
# matplotlib.rc("font",**font)
#与上等价
#matplotlib.rc("font",family='MicroSoft YaHei',weight='bold',size='larger')
...

matplotlib绘制人数折线图

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc",size=20)
y=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]

x=range(11,31)

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

plt.plot(x,y)

#设置x轴刻度
_xtick_labels=["{}岁".format(i) for i in x]
plt.xticks(x,_xtick_labels,rotation=45,fontproperties=my_font)

#绘制网格
plt.grid(alpha=0.4)#alpha设置透明度

#展示
plt.show()

matplotlib绘制电影票的条形统计图

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc")
a = ["哪吒之魔童降世", "流浪地球", "复仇者联盟4:\n终局之战", "我和我的祖国", "中国机长", "疯狂的外星人", "飞驰人生", "烈火英雄", "少年的你", "速度与激情:\n特别行动",
     "蜘蛛侠:\n英雄远征", "扫毒2天地对决", "误杀", "叶问4", "大黄蜂", "攀登者", "惊奇队长", "比悲伤更悲伤的故事", "哥斯拉2:\n怪兽之王", "阿丽塔:\n战斗天使"]

b = [49.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.62, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
     6.86, 6.58, 6.23]

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

#绘制条形图
plt.bar(range(len(a)),b,width=0.3)
#设置字符串在x轴上
plt.xticks(range(len(a)),a,fontproperties=my_font,rotation=90)


plt.show()

# bar(x, height, width=0.8, bottom=None, ***, align='center', data=None, **kwargs)
#
# x 表示柱子在x轴的坐标,数据类型为int或float类型,x可以为字符串数组
# height 表示柱状图的高度,也就是y坐标值,数据类型为int或float类型,
# width 表示柱状图的宽度,取值在0~1之间,默认为0.8
# bottom 柱状图的起始位置,也就是y轴的起始坐标,
# align 柱状图的中心位置,"center","lege"边缘
# color 柱状图颜色
# edgecolor 边框颜色
# linewidth 边框宽度
# tick_label 下标标签
# log 柱状图y周使用科学计算方法,bool类型
# orientation 柱状图是竖直还是水平,竖直:"vertical",水平条:"horizontal"

matplotlib绘制电影时长的直方图

from matplotlib import pyplot as plt
from matplotlib import font_manager

a =[103,96,121,134,132,131,100,121,133,109,138,127,92,134,104,103,107,77,147,88,129,126,125,84,98,113,83,116,126,86,106,109,103,132,85,127,122,91,123,128,139,86,138,98,113,99,77,110,105,107,132,127,131,122,113,128,86,89,109,96,90,149,130,100,105,107,81,99,146,89,88,127,121,120,84,136,128,106,127,122,142,139,100,125,128,107,89,124,97,86,117,107,95,108,103,82,91,143,100,123,130,79,133,133,79,126,122,151,126,97,101,97,128,116,100,82,155,146,98,112,78,139,144,146,160,86,160,81,114,128,101,99,89,128,121,123,105,89,80,93,117,146,108,152,103,105,79,89,98,141,81,129,91,79,147,130,145,108,102,105,156,102,150,116,96,108,108,125,102,107,112,136,128,108,91,100,130,109,129,83,98,88,132,100,115,123,105,120,83,110,108,92,93,147,96,103,114,153,92,106,116,116,77,128,76,158,156,93,94,153,155,119,106,117,101,97,90,160,114,88,154,108,102,149,108,143,88,123,113,159,122,110,91,76,91,148,135,104,77,79,147,125,149,145,154,89,123,136,97,120,]

#计算组数
d=3#组距
# //表示除法取整
num_bins=(max(a)-min(a))//d#组数=极差除以组距
print((max(a)-min(a)))
#设置图形的大小
plt.figure(figsize=(20,8),dpi=80)
# density代表频率,y轴是频率,就变成了频率分布直方图。之前是频数分布直方图
plt.hist(a,num_bins,density=1)#a 需要统计的数据   num_bins 组数

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

#绘制网格
plt.grid()

plt.show()

人口普查的频率分布直方图

from matplotlib import pyplot as plt
from matplotlib import font_manager

#interval是x轴坐标  quantity是x对应的y值
interval =[0,5,10,15, 20,25,30,35,40,45,60,90]
width = [5,5,5,5,5,5,5,5,5,15,30,60]
quantity = [836,2737,3723,3926,3596,1438,3273,642,824,613,215,47]

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

#设置x轴刻度
_x=[i-0.5 for i in range(13)]
_xtick_labels=interval+[150]
plt.xticks(_x,_xtick_labels)

#加网格
plt.grid()

#画图
plt.bar(range(12),quantity,width=1)

plt.show()

matplotlib的相互比较的有图例的折线图

from matplotlib import pyplot as plt
from matplotlib import font_manager
my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc",size=20)

y_1=[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
y_2=[1,0,3,1,2,2,3,3,2,1,2,1,1,1,1,1,1,1,1,1]

x=range(11,31)

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

#新版本中linestytle必须写成ls,linewidth必须写成lw
plt.plot(x,y_1,label="自己",color="orange",ls='--')#label 图例的意思
plt.plot(x,y_2,label="同桌",color="cyan",lw="1")#color设置折现的颜色

#设置x轴刻度
_xtick_labels=["{}岁".format(i) for i in x]
plt.xticks(x,_xtick_labels,rotation=45,fontproperties=my_font)

#绘制网格
plt.grid(alpha=0.4)#alpha设置透明度

#添加图例
plt.legend(prop=my_font,loc="upper left") #prop把图例意思的中文展现出来,loc 图例显示的位置,这里设置为左上角

#展示
plt.show()

matplotlib绘制气温随时间变化的散点图

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc")
y_3=[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]
y_10=[26,26,28,19,21,17,16,19,18,20,20,19,22,23,17,20,21,20,22,15,11,12,2,13,17,10,11,13,12,13,6]

x_3=range(1,32)
x_10=range(51,82)

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

#使用scatter方法绘制散点图,和之前的折线图的唯一区别
plt.scatter(x_3,y_3,label="3月份")
plt.scatter(x_10,y_10,label="10月份")

#调整x轴的刻度
_x=list(x_3)+list(x_10)
_xtick_labels=["3月{}日".format(i) for i in x_3]
_xtick_labels+=["10月{}日".format(i-50) for i in x_10]
plt.xticks(_x[::3],_xtick_labels[::3],fontproperties=my_font,rotation=45)

#添加图例
plt.legend(prop=my_font,loc="upper left")

#添加描述信息
plt.xlabel("时间",fontproperties=my_font)
plt.ylabel("温度",fontproperties=my_font)
plt.title("标题",fontproperties=my_font)

plt.show()

matplotlib绘制多次条形统计图

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc",size=14)
a=["猩球崛起3:终极之战","敦刻尔克","蜘蛛侠:英雄归来","战狼2"]
b_16=[15746,312,4497,319]
b_15=[12357,156,2045,168]
b_14=[2358,399,2358,362]

#设置柱子的宽度
bar_width=0.2

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

x_14=list(range(len(a)))
x_15=[i+bar_width for i in x_14]
x_16=[i+bar_width*2 for i in x_14]

#画图,添加图例label=""
plt.bar(range(len(a)),b_14,width=bar_width,label="9月14日")
plt.bar(x_15,b_15,width=bar_width,label="9月15日")
plt.bar(x_16,b_16,width=bar_width,label="9月16日")

#显示图例
plt.legend(prop=my_font)

#设置x轴的刻度
plt.xticks(x_15,a,fontproperties=my_font)

plt.show()

matplotlib绘制横着的条形统计图

from matplotlib import pyplot as plt
from matplotlib import font_manager

my_font=font_manager.FontProperties(fname="c:\Windows\Fonts\simsun.ttc")
a = ["哪吒之魔童降世", "流浪地球", "复仇者联盟4:\n终局之战", "我和我的祖国", "中国机长", "疯狂的外星人", "飞驰人生", "烈火英雄", "少年的你", "速度与激情:\n特别行动",
     "蜘蛛侠:\n英雄远征", "扫毒2天地对决", "误杀", "叶问4", "大黄蜂", "攀登者", "惊奇队长", "比悲伤更悲伤的故事", "哥斯拉2:\n怪兽之王", "阿丽塔:\n战斗天使"]

b = [49.01, 26.94, 17.53, 16.49, 15.45, 12.96, 11.8, 11.62, 11.28, 11.12, 10.49, 10.3, 8.75, 7.55, 7.32, 6.99, 6.88,
     6.86, 6.58, 6.23]

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

#绘制横着的条形图
plt.barh(range(len(a)),b,height=0.3,color="orange")

#设置字符串在x轴上
plt.yticks(range(len(a)),a,fontproperties=my_font)

#加网格
plt.grid(alpha=0.3) # alpha 透明度

plt.show()


# plt.barh()
# y:表示y坐标,数据类型为int或float类型,刻度自适应调整;也可传dataframe的object,y轴上等间距排列;
# height:表示柱状图的长度,也就是x坐标值,数据类型为int或float类型;
# width:表示柱状图的高度,取值在0~1之间,默认为0.8;
# 其他参数与plt.bar()类似。

什么是numpy

一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算

numpy创建数组

import numpy as np
import random

#使用numpy创建数组,得到ndarray类型
t1=np.array([1,2,3])
print(t1)
print(type(t1))

t2=np.array(range(10))
print(t2)
print(type(t2))

t3=np.arange(4,10,2)
print(t3)
print(type(t3))
print(t3.dtype)

#numpy中的数据 类型,dtype是可以指定的
t4=np.array(range(1,4),dtype="float32")
print(t4)
print(t4.dtype)

#numpy中的bool类型
t5=np.array([1,1,0,1,0,0],dtype=bool)
print(t5) # [ True  True False  True False False]
print(t5.dtype)# bool

#调整数据类型 astype()
t6=t5.astype("int8")
print(t6)#[1 1 0 1 0 0]
print(t6.dtype)#int8

#numpy中的小数 random.random() 用于生成0<=x<1.0 的随机浮点数
t7=np.array([random.random() for i in range(10)])
print(t7)#[0.28139362 0.95436139 0.78422207 0.02870725 0.2361436  0.81819838
#  0.46061887 0.04812866 0.30869495 0.38791252]
print(t7.dtype)#float64

#取小数 np.round()
t8=np.round(t7,2)# 对t7取2位小数
print(t8)#[0.1  0.09 0.77 0.89 0.6  0.06 0.8  0.94 0.87 0.29]

numpy数组的形状

import numpy as np

t1=np.arange(12)# 一维数组
print(t1)#[ 0  1  2  3  4  5  6  7  8  9 10 11]
print(t1.shape)#(12,)

t2=np.array([[1,2,3],[4,5,6]])#二维数组
print(t2)
# [[1 2 3]
#  [4 5 6]]
print(t2.shape)#(2, 3)

t3=np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(t3)
print(t3.shape)# (2, 2, 3)

t4=np.arange(12)
print(t4.reshape((3,4)))#改变t4的形状,三行四列

t5=np.arange(24).reshape((2,3,4))#转换成2块,每一块三行,每一行4列
print(t5)
print(t5.reshape((4,6)))#变成二维的
print(t5.reshape(24,))#变成一维的

#当不知道有几个数的时候可以用shape[0]*shape[1]
#shape[0] 第一维的长度    shape[1] 第二维的长度 shape[2] 第三维的长度
t6=t5.reshape((t5.shape[0]*t5.shape[1]*t5.shape[2],))

print(t5.flatten())#flatten() 将t5变成一维的

t5=t5.reshape((4,6))
print(t5)

#广播原则 + * / 都会运用到每一个数字上
print(t5+2)#t5的每一个数字都加了2
print(t5*2)#t5的每一个数字1都乘了2
print(t5/2)#t5的每一个数字都除了2

# nan:0除以0  inf:无限大
#print(t5/0)
# [[nan inf inf inf inf inf]
#  [inf inf inf inf inf inf]
#  [inf inf inf inf inf inf]
#  [inf inf inf inf inf inf]]

t6=np.arange(100,124).reshape((4,6))
#数组形状一样时,对应值相加、相乘、相除
print(t5+t6)
print(t5*t6)

#数组形状不一样时
t7=np.arange(0,6)
print(t5-t7)#行数一样,在行上运算

t8=np.arange(4).reshape((4,1))
print(t8)
print(t5)
print(t5-t8)#列数一样,在列上运算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值