Matplotlib笔记
1.绘制折线图
- 基本操作
- 设置线条宽度,颜色
- 添加x y轴名称
- 设置字体(封装成字典),解决中文无法识别的问题
- 添加标题
- 保存图片
import matplotlib.pyplot as plt
#指定要绘制的点的横纵坐标(大小必须相同)
x = [1,2,3,4,5]
y = [1,4,9,16,25]
#设置字体,解决中文无法识别的问题
font_title = {
'family':'FangSong',
'weight':'bold',
'size':25
}
#设置线条宽度,颜色
plt.plot(x,y,linewidth = 1,color = 'red')
#添加x,y轴名称
#可将所需字体的字典加入到xlabel和ylabel函数参数中
plt.xlabel('x')
plt.ylabel('y = x^2')
#添加标题
plt.title('y=x^2函数绘制多点折线图',font = font_title)
#保存图片
plt.savefig('../my_image/img1.jpg')
plt.show()

- 绘制正余弦曲线
- 当所选取的点数量较多,最终会呈现处函数曲线图样式
- 可利用numpy中的数组类型npArray初始化点的横纵坐标
- 绘制图例
import matplotlib.pyplot as plt
#利用numpy库,调用其pi常量和sin、cos函数
import numpy as np
#设置字体,解决中文无法识别的问题
font_title = {
'family':'FangSong',
'weight':'bold',
'size':12
}
#生成-pi到pi间的1000个数
x = np.linspace(-np.pi*2,np.pi*2,1000)
#调用numpy内置数学函数,此方法生成npArray数组,也可设置横纵坐标
y1 = np.sin(x)
y2 = np.cos(x)
#作图,在label中设置图例
plt.plot(x,y1,linewidth = 1,label = '正弦曲线')
plt.plot(x,y2,linewidth = 1,label = '余弦曲线')
#必须用legend函数才能显示图例
#函数参数:
# - prop 设置字体
# - loc 设置图例位置
# - fancybox 边框 True
# - framealpha 透明度 0.7
# - shadow 阴影 True
# - borderpad 边框宽度 1
plt.legend(prop = font_title, loc = 'upper right')
plt.show()

- 设置线条样式
- 在plot函数中设置
- 种类丰富,可参考文章:https://blog.youkuaiyun.com/qq_30992103/article/details/101905466
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,100,100)
plt.xlabel('x')
plt.ylabel('y')
#绘图时,设置线条样式
plt.plot(x,x-20,'--c')
plt.plot(x,x-10,'-.b')
plt.plot(x,x,':r')
plt.plot(x,x+10,'-g')
plt.show()

- 应用子图subplot
- 即将整个屏幕切分成m*n的矩阵,在每个小块上画画
- 每次画画plt.plot(…)前,都要指定画画区域
import matplotlib.pyplot as plt
import numpy as np
#生成-pi到pi间的1000个数
x = np.linspace(-np.pi,np.pi,1000)
#生成2*3的画布,并选择在第1区域个进行画画,即指定画画区域
plt.subplot(2,2,1)
plt.plot(x,np.sin(x/2),linewidth = 1)
plt.subplot(2,2,2)
plt.plot(x,np.sin(x),linewidth = 1)
plt.subplot(2,2,3)
plt.plot(x,np.sin(x*2),linewidth = 1)
plt.subplot(2,2,4)
plt.plot(x,np.sin(x*4),linewidth = 1)
plt.show()

- 可设置x y轴的刻度布局
- plt.xlim()
- plt.ylim()
- 参数为范围区间
import matplotlib.pyplot as plt
import numpy as np
#生成-pi到pi间的1000个数
x = np.linspace(-np.pi,np.pi,1000)
#在第1个区域,默认x为-pi到pi,y为-1到1
plt.subplot(1,2,1)
plt.plot(x,np.sin(x),linewidth = 1, color = 'red')
#在第2个区域,设置x为-2pi到2pi,y为-2到2
plt.subplot(1,2,2)
plt.xlim(-np.pi*2,np.pi*2)
plt.ylim(-2,2)
plt.plot(x,np.sin(x),linewidth = 1, color = 'red')
plt.show()

2.绘制散点图
- 基本操作
- 点的横纵坐标设置与折线图相同,仍然是两个大小相同的列表或npArray数组
- 设置点的面积大小
import matplotlib.pyplot as plt
import numpy as np
#正弦曲线上的一系列点
x = np.linspace(0,10,100)
y = np.sin(x)
#绘制折线图,与散点图对比
plt.plot(x,y,linewidth = 1,color = 'red')
#plt.scatter(...)绘制散点图,s为点的面积大小
plt.scatter(x,y,s = 20)
plt.show()

- 利用随机函数设置随机点
- 随机点、随机大小、随机颜色
- 注意random方法产生的是0-1的数,括号内参数是随机数的个数
- 以上3种随机产生的列表或npArray数组,大小均要相同
- scatter内参数
- s 点的面积大小
- c 点的颜色
- alpha 点的透明度
import matplotlib.pyplot as plt
import numpy as np
#利用random内置方法,产生随机点,点的个数必须相同
#注意:随机数是0-1的
x = np.random.rand(100)
y = np.random.rand(100)
#产生随机大小
size = np.random.rand(100)*1000
#产生随机颜色
color = np.random.rand(100)
#alpha是透明度
plt.scatter(x,y,s = size, c = color, alpha=0.5)
plt.show()

3.绘制柱状图
-
基本操作
-
bar() 绘制柱状图
- width 宽度
- bottom y轴起点
-
字体设置的另一种方法:设置全局字体
plt.rcParams[‘font.sans-serif’] = [‘FangSong’] #设置全局字体
plt.rcParams[‘axes.unicode_minus’]=False #正常显示负号
plt.rcParams[‘font.size’]=18 #设置字体大小
-
-
替换横(纵)坐标的值 xticks() yticks()
-
设置网格 grid()
- linestyle 线条样式
- color 线条颜色
- alpha 线条透明度
-
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong'] #设置全局字体
plt.rcParams['axes.unicode_minus']=False #正常显示负号
#plt.rcParams['font.size']=18 #设置字体大小
x = [1990,1995,2000,2005,2010,2015,2020]
y = [101,200,600,1500,9000,15000,16000]
x_label = ['{}年'.format(year) for year in range(1990,2021,5)]
#绘制柱状图
plt.bar(x,y,width = 2, bottom = 2000)
#设置x坐标的替换值(两个列表/数组大小必须完全相同)
#默认全局字体,也可设置font参数,传入之前的字典类型即可
plt.xticks(x,x_label)
#设置网格
plt.grid(True,linestyle=':',color='r',alpha=0.6)
plt.show()

- 水平柱状图bar 和 垂直柱状图barh
- 绘制 水平线axhline 和 垂直线axvline
- 正负不同的柱子颜色不同
- 显示数字
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [-5,-2,3,6,9]
##################################################################################
plt.subplot(1,2,1)
#返回一个myBar对象
myBar = plt.bar(x,y,width = 0.5)
#对小于0的柱设置颜色为黄色
for bar,height in zip(myBar,y):
if height < 0:
bar.set(color = 'yellow')
#绘制水平线
plt.axhline(0,color = 'red',linewidth = 1)
##################################################################################显示数字
# ha='center' horizontalalignment(水平对齐)
# va= 'bottom' verticalalignment(垂直对齐)
# fontsize则是文字大小
# '%.0f' % b,代表标注的文字,其中0表示不显示小数后面的数值,1就表示显示小数后面一位,以此类推
# a, b - 0.5 表示在每一柱子对应x值、y值下方0.5处标注文字说明
for a, b in zip(x, y):
if b > 0:
plt.text(a, b, '%.f' % b, ha='center', va='bottom', fontsize=10)
else:
plt.text(a, b - 0.5, '%.f' % b, ha='center', va='bottom', fontsize=10)
##################################################################################
plt.subplot(1,2,2)
#水平柱状图不能设置宽度width,要设置条的宽度要用height
plt.barh(x,y,color = 'pink',height = 0.5)
#绘制垂直线
plt.axvline(0,color = 'red',linewidth = 1)
plt.show()

- label旋转
- 在rotation属性中设置(值为角度)
- 想要ylabel正过来,要设置旋转为0
import matplotlib.pyplot as plt
font_label = {
'family':'FangSong',
'weight':'bold',
'size':18
}
font_tick = {
'family':'FangSong',
'weight':'bold',
'size':12
}
x = [1990,1995,2000,2005,2010,2015,2020]
y = [101,200,600,1500,9000,15000,16000]
x_label = ['{}年'.format(year) for year in range(1990,2021,5)]
plt.bar(x,y,width = 1)
plt.plot(x,y,linewidth = 1,color = 'r')
plt.xlabel('年份',font_label)
#将ylabel旋转
plt.ylabel('销量',font_label,rotation = 0)
#将x_label旋转
plt.xticks(x,x_label,font = font_tick,rotation = 45)
plt.show()

4.绘制饼状图
- 基本操作
- 输入数据
- 设置饼旁边的批注
- 设置饼的颜色
- 设置饼与中心的分离程度
- 饼上显示比例
- 设置饼的阴影
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['FangSong'] #设置全局字体
plt.rcParams['axes.unicode_minus']=False #正常显示负号
plt.rcParams['font.size'] = 18 #设置字体大小
#设置饼状图标题
plt.title('哈工大深圳的男女比例,哎...')
#依次设置:数据列表、批注label列表、颜色列表
numList = [3500,500]
labelnameList = ['男','女']
colorList = ['#3AABC6','#F183BF'] #颜色可以用十六进制
#利用pie绘图
plt.pie(
numList, #自动计算比例
labels = labelnameList, #设置批注
colors = colorList, #设置颜色
explode = [0,0.05], #设置某块饼与圆心的分离程度
autopct = '%.2f%%', #设置饼上显示比例
shadow = False, #设置阴影
)
#设置图例
plt.legend(['男的','Our Princess'],loc = 'upper right',fontsize = 12)
plt.show()

5.绘制3D图(画着玩)
基本操作如下,这样可以画一个一般的3D图形:
(可用鼠标左键拖动,多视角查看;右键拖动,缩放查看)
import matplotlib.pyplot as plt
import numpy as np
#导入3D包,这个包与matplotlib一起的,一般不用单独安装
from mpl_toolkits.mplot3d import Axes3D
#设置x y范围
x = np.arange(-5,5,0.1)
y = np.arange(-5,5,0.1)
#对x y数据执行网格化
x,y=np.meshgrid(x,y)
#绘制的函数
z = np.sqrt(x**2+y**2)
#创建Axes3D对象
ax = Axes3D(plt.figure())
#画图:以x y为定义域,z为目标函数的函数图像
#后面的参数是设置绘图为彩色
#可用color参数传入想要的颜色
ax.plot_surface(x,y,z,cmap=plt.get_cmap('rainbow'))
plt.show()

5130



被折叠的 条评论
为什么被折叠?



