【数据分析之Matplotlib】基本图形绘制实例


2020年5月28日学习了b站 Matplotlib的简单教程,笔记记录于此

1.基本绘制

import matplotlib.pyplot as plt

# 准备x  y
x = range(-100, 100)   # 200个点
y = [i**2 for i in x]

# 绘制一元二次方程曲线
plt.plot(x, y, linewidth=5)
plt.xlabel('x')
plt.ylabel('y')
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像负号显示为方块的问题
plt.title('title')

# 保存图片
# plt.savefig('result')  #默认的格式png
plt.savefig('result.pdf')
plt.show()

在这里插入图片描述

2.subplot使用

# 创建0-10中100个等差数
x = np.linspace(0,10,100)
sin_y = np.sin(x)
# 绘制正弦曲线
# 对画布进行分区 将画布分为2行2列  画到区1
plt.subplot(2, 2, 1)
# 修改x、y轴的坐标
plt.xlim(-5, 20)
plt.ylim(-2, 2)
plt.plot(x, sin_y)

plt.subplot(2, 2, 4)
plt.plot(x, np.cos(x))
plt.show()

在这里插入图片描述

3.散点图

# 绘制10种大小 100种颜色的散点图
# 创建x
np.random.seed(0) # 执行多次每次获取的随机数都是一样的
x = np.random.rand(100)
y = np.random.rand(100)
# 生成10种大小?
size = np.random.rand(100)*100
# 生成100种颜色
color = np.random.rand(100)
print(x, y)

# 绘制散点图
plt.scatter(x, y, s=size, c=color, alpha=0.7)  # s表示点的大小 c表示点的颜色 alpha表示透明度
plt.show()
'''
使用plot绘制和使用scatter绘制出来的图形是没有区别的,
但是使用plot绘制图形的速度优于scatter,所以如果画一堆点,而且点的形式没有差别,那么我们
使用plot,如果点的形式有差别(指点的大小和颜色不同)则必须使用scatter

注意:点的个数和颜色的个数要相同
      点的个数和点大小的个数可以不同,如果点的个数大于大小的个数,则会循环获取大小
'''

在这里插入图片描述

4.样式与图例

# 创建x
x=np.linspace(0,10,100)
# 使用legend()图例,给plot方法添加参数label
plt.plot(x,x+0,'--g',label='--g')
plt.plot(x,x+1,'-.r',label='-.r')
plt.plot(x,x+2,':b',label=':b')
plt.plot(x,x+3,'.k',label='.k')
plt.plot(x,x+4,',c',label=',c')
plt.plot(x,x+5,'*y',label='*y')
# 左上角upper left fancybox边框  framealpha透明度  shadow阴影  borderpad边框宽度
plt.legend(loc='upper right',fancybox=True,framealpha=0.5,shadow=True,borderpad=1) # 默认的位置在左上角upper left  可以通过loc进行修改
plt.show()

在这里插入图片描述

5.柱状图

# 生成x y
np.random.seed(0)
x=np.arange(5)
y=np.random.randint(-5,5,5)
# 将画布分为1行2列  在第一个区域画bar
plt.subplot(1,2,1)
# 调用bar函数绘制柱状图
plt.bar(x,y,color='blue')
# 在0位置水平方向添加蓝色的线条
plt.axhline(0,color='blue',linewidth=2)

# 在第二个区域画barh
# barh 将y和x进行对换,竖着方向为x轴
plt.subplot(1,2,2)
plt.barh(x,y,color='red')
# 在0位置垂直方向添加红色线条
plt.axvline(0,color='red',linewidth=2)

plt.show()

在这里插入图片描述

# 三部电影的名称
real_names=['千与千寻','玩具总动员4','黑衣人:全球追缉']
# 3天内票房数
real_num1=[7548,4013,1673]
real_num2=[5453,1840,1080]
real_num3=[4348,2345,1890]
x=np.arange(len(real_names))
# 绘制柱状图
width=0.3
plt.bar(x,real_num1,alpha=0.5,width=width,label=real_names[0])
plt.bar([i+width for i in x],real_num2,alpha=0.5,width=width,label=real_names[1])
plt.bar([i+2*width for i in x],real_num3,alpha=0.5,width=width,label=real_names[2])
plt.rcParams['font.sans-serif']=['SimHei'] # 用来正常显示中文标签
# 设置x坐标的值  第1天   第2天   第3天
x_label=['第{}天'.format(i+1) for i in x]
plt.xticks([i+width for i in x],x_label)
plt.ylabel('票房数')
plt.legend()
plt.title('3天3部电影票房数')
plt.show()

在这里插入图片描述

6.饼状图

# 准备男、女的人数及比例
man=71351
woman=68187
man_perc=man/(woman+man)
woman_perc=woman/(woman+man)
# 添加名称
labels=['男','女']
# 添加颜色
colors=['blue','red']
# 绘制饼状图  pie
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
# labels 名称 colors:颜色,explode=分裂  autopct显示百分比
paches,texts,autotexts=plt.pie([man_perc,woman_perc],labels=labels,colors=colors,explode=(0,0.05),autopct='%0.1f%%')

# 设置饼状图中的字体颜色
for text in autotexts:
    text.set_color('white')

# 设置字体大小
for text in texts+autotexts:
    text.set_fontsize(20)
plt.show()

在这里插入图片描述

7.直方图

# 使用np.random.normal()指定期望和均值的正态分布
x=np.random.normal(0,0.8,1000)
y=np.random.normal(-2,1,1000)
z=np.random.normal(3,2,1000)
# 字典
kwargs=dict(bins=100,alpha=0.5) # alpha是透明度,bins为柱的宽度
plt.hist(x,**kwargs)
plt.hist(y,**kwargs)
plt.hist(z,**kwargs)
plt.show()

在这里插入图片描述

8.等高线图

# 创建x y
x=np.linspace(-10,10,100)
y=np.linspace(-10,10,100)
# 计算x y相交的点 X Y
X,Y=np.meshgrid(x,y)
# 计算Z
Z=np.sqrt(X**2+Y**2)
# 绘制等高线图
# plt.contour(X,Y,Z)
plt.contourf(X,Y,Z)
plt.show()

在这里插入图片描述

9.三维图形

# 导入3d包
from mpl_toolkits.mplot3d import Axes3D
# 创建X  Y  Z
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
figure=plt.figure()
# 创建Axes3D对象
ax=Axes3D(figure)
ax.plot_trisurf(X,Y,Z)
plt.show()

在这里插入图片描述

可参考博客:python绘制三维图
【matplotlib】之清理、清除 axes和figure(plt.cla、plt.clf、plt.close)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值