python3使用matplotlib绘图的简要记录

本文详细介绍了使用Matplotlib绘制各种图表的方法,包括条形图、折线图、饼图、极坐标图、散点图等,并展示了如何设置图表样式、布局多图以及保存图表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

matplotlib能够输出MATLAB风格的图片。我因为用的不多所以总是忘记怎么用。本文的目的是对matplotlib的用法做个记录和简单总结,希望在忘记用法的时候看一下就能记起来。本文基于3.2.1版本,如果版本升级用法有较大变化的话还是要参考官方文档

本文还参考了:https://www.cnblogs.com/chenzhijuan-324/p/10700585.html

 

绘图的基本步骤

(1)导入matplotlib.pyplot包;(2)创建绘图区;(3)创建和选定子图;(4)设置子图的参数(x,y,图类型,颜色等);(5)输出图形;

示例如下,这里使用了几种常用的图,并展示不同的参数配置用法:

import numpy as np
import matplotlib.pyplot as plt
 
names = ['a', 'b', 'c', 'd' ,'e']
values_1 = [8, 13, 22, 25, 32]
values_2 = [59, 73, 13, 47, 29]
x = np.linspace(0.1, 10, 100)
aa = np.arange(len(names))
width = 0.36

# 初始化图片
plt.figure(figsize=(16, 9))   
plt.suptitle('Matplotlib Examples') 

# 条形图 + 折线图 重叠
plt.subplot(241)    
plt.bar(names, values_1, color='#0cff0c') # neon green,https://xkcd.com/color/rgb/
plt.plot(names, values_2,color='#ff9408', marker='o') # tangerine

# 条形图 - 输出数据标签
plt.subplot(242)  
plt.bar(aa - width/2, values_1, width, label='v1') 
plt.bar(aa + width/2, values_2, width, label='v2')
for a,b in zip(aa,values_1):
    plt.text(a-width, b+0.1, '%.f' % b) #输出数据的标签
for a,c in zip(aa,values_2):
    plt.text(a, c+0.1, '%.f' % b)
plt.xticks(aa, names)

# 折线图1
plt.subplot(243)
plt.plot(x, np.sin(x), label='sine',color='c', linestyle='--') 
plt.plot(x, 2*np.cos(x), label='cosine', color='r')
plt.legend(loc='lower center')  
plt.text(0.5,1,'This is an example text.') # 指定位置,输出文本

# 折线图2
plt.subplot(244) 
plt.plot(x, 6*x+1, label='linear', color='m', linestyle=':')  
plt.plot(x, x**2, label='quadratic', color='y', linestyle='-.', linewidth = '3')  
plt.plot(x, 12/x, label='cubic', color='k') 
plt.xlabel('x label')  
plt.ylabel('y label') 
plt.title("Simple Plot") 
plt.legend() 

# 饼图
plt.subplot(245)
plt.pie(values_1, labels=names, explode=(0,0,0.1,0,0), autopct='%1.1f%%', shadow=True, startangle=90)
plt.axis('equal')  # Equal aspect ratio ensures that pie is drawn as a circle. 

# 极坐标图
plt.subplot(246, projection='polar', rmax=1, rticks=[0.2, 0.4, 0.6, 0.8, 1], rlabel_position=-22.5) 
r = np.arange(0, 1, 0.01)
theta = 4 * np.pi * r
plt.plot(theta, r)
plt.title("A line plot on a polar axis", va='bottom')
plt.grid(True)
 
# 散点图(不同标记)
plt.subplot(247)
plt.scatter(names, values_1, marker='s')
plt.scatter(names, values_2)
plt.scatter(names, [34,55,49,17,66], marker='^')

# 带表的图
plt.subplot(248)
plt.plot(names, values_1, 'o--')  
plt.plot(names, values_2, '^--')
plt.table(cellText=[values_1,values_2],
          rowLabels=['values_1','values_2'],
          colLabels=names,
          loc='bottom')
plt.subplots_adjust(left=0.1, bottom=0.1)
plt.xticks([])

#plt.show()
plt.savefig('matplotlib_eg.png') # 保存图片

在jupyter notebook中执行结果如下:

 

 

matplotlib.pyplot下的常用函数:

linestyle可选参数:

 

marker(标记)可选参数:

 

color可选颜色:

也可以在这里找到RGB表示方法来使用更多的颜色,例如:

 

目前我用到的就只有这么多了。后面需要用到的话我再补充吧。

 

使用subplot 对多图布局

可以有两种格式:subplot(235) 或subplot(2,3,5) 。两种格式的意义是一样的,都表示2行3列的第5张图。但是如果图非常多,那么就需要加逗号了,例如subplot(4,5,17),表示4行5列的第17张图(即第4行的第2张图)。

下面的代码是布局的示例。实际使用中不必要这么麻烦,只需要规划好子图的个数和布局,简单点就好啦~

#coding=utf-8
import matplotlib.pyplot as plt

fig = plt.figure(facecolor='white', figsize=(16,12))

plt.subplot(461)
plt.text(0.3,0.5,'subfig 1',size=13)

plt.subplot(462)
plt.text(0.3,0.5,'subfig 2',size=13)

plt.subplot(4,6,3)
plt.text(0.3,0.5,'subfig 3',size=13)

plt.subplot(4,2,2)
plt.text(0.4,0.5,'subfig 4',size=13)

plt.subplot(4,3,4)
plt.text(0.4,0.5,'subfig 5',size=13)

#当需要占用多列(例如三列中需要占用两列),则可用此方法。(4,6)表示子图的布局,(1,2)表示起始位置【(0,0)为起始点】,colspan表示占用的列数,rowspan表示占用的行数
plt.subplot2grid((4,6),(1,2),colspan=3)
plt.text(0.4,0.5,'subfig 6',size=13)

plt.subplot(4,6,12)
plt.text(0.3,0.5,'subfig 7',size=13)

plt.subplot(2,3,4)  #也可以这样表示: plt.subplot2grid((4,6),(2,0),colspan=2,rowspan=2)
plt.text(0.4,0.5,'subfig 8',size=13)

plt.subplot(2,6,9)
plt.text(0.3,0.5,'subfig 9',size=13)

plt.subplot(2,2,4)
plt.text(0.4,0.5,'subfig 10',size=13)

plt.show()

布局如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值