matplotlib

`matplotlib` 是一个流行的 Python 数据可视化库,用于绘制出版质量级别的图形。它可以创建各种类型的图形,如折线图、散点图、条形图、直方图、等高线图、三维图和动画等。

`matplotlib` 的基本作图对象是图形(Figure)、坐标系(Axes)和绘图函数(Plotting functions)。其中,图形是最上层的容器,坐标系是图形下面基本的子容器,绘制函数则是直接在坐标系上添加各种图形元素进行绘图。

除了这些基本的绘图函数,`matplotlib` 还提供了许多更高级的功能,例如概率密度图、镶嵌曲线、误差线、填充和阴影等等。此外,它还支持多种输出格式,包括常见的图像格式(例如 png、jpeg 和 pdf),以及 LaTeX、SVG 和 AI 等矢量图格式。

`matplotlib` 被广泛应用于科学计算、数据分析、机器学习、金融、天气预测、生物学和地理信息系统等领域。其文档完善、社区活跃,还提供了大量的示例和教程,为用户提供了丰富的素材和工具。

搭建

安装

安装

pip install matplotlib


引入

pip install matplotlib


      

基础信息

解决中文乱码

import matplotlib
matplotlib.rcParams['font.family'] = 'SimHei'



主题背景

from matplotlib import style
style.use('ggplot')  # 灰色网格背景
style.use('fivethirtyeight')  # 白色网格背景
style.use('dark_background')  # 黑色背景
style.use('grayscale')  # 外灰内白

plt.grid(True)  # 白色网格背景



相关描述

plt.title('标题')  # 标题
plt.suptitle('顶级标题')  # 顶级标题
plt.ylabel("左侧文字")  # 左侧文字
plt.xlabel("底部文字")  # 底部文字


          

绘画

基础

创建画布

plt.figure(1)  # 创建画布【参数代表第几个画布】


注意:默认有一个画布,所以没创建也可以画

绘制

plt.plot(x, y, 'r') # 第三个参数为颜色,r为red红色



添加图例

plt.plot(x, y, 'r', label='sine')  # label添加图例
plt.legend(loc='upper left')       # 图例的显示位置,左上
plt.legend(loc='lower right')      # 图例的显示位置,右下



x/y轴的数据范围

plt.xlim(0, 5)
plt.ylim(0, 120)



x/y轴上面坐标数字替换为文字

plt.xticks([0.2,1.2,2.2,3.2], ['初级程序员', '中级程序员', '高级程序员', '架构师'])
plt.yticks([20, 40, 60, 80], ['一般', '喜欢', '很喜欢', '超级喜欢'])



某个点添加文字

plt.text(145, 200, "文字") # x轴,y轴



显示

plt.show()

进阶

创建一个具有3D坐标轴的画布

ax = plt.axes(projection='3d')

     

子图

划分子图

ax1 = plt.subplot(211)  # 子图划分 2行,1列,第一个
ax1.plot(x, y1)


自动调整图形的布局

plt.tight_layout()  # 自动调整图形的布局,使得子图和标签等元素能够更好地适应图像窗口

   

示例

线性图

曲线

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-100, 101)
y = 0.5 * x ** 2 + 2 * x
plt.plot(x, y)
plt.show()

多图

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(0, 100, 1)
y1 = np.sin(x)
y2 = x ** 2 + 2 * x

plt.figure(1)
ax1 = plt.subplot(211)
ax1.plot(x, y1)

plt.figure(2)
ax2 = plt.subplot(212)
ax2.plot(x, y2)

plt.tight_layout()
plt.show()           

散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(50)
y = np.random.rand(50)

# marker散点图案,s散点大小
plt.scatter(x, y)
# plt.scatter(x, y, c='red', marker='*', s=10, cmap='Spectral')

plt.show()


          
        

柱状图

import numpy as np
import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei'
plt.title('编程语言各阶段人群喜爱统计')
plt.xlabel('人群')
plt.ylabel('分数')

people = ['初级程序员', '中级程序员', '高级程序员', '架构师']
index = np.arange(4)

python = (85, 67, 23, 98)
java = (50, 67, 89, 14)
javaScript = (60, 20, 56, 22)
c = (88, 23, 40, 87)

plt.bar(index, python, width=0.2, label='Python')
plt.bar(index + 0.2, java, width=0.2, label='Java')
plt.bar(index + 0.4, javaScript, width=0.2, label='javaScript')
plt.bar(index + 0.6, c, width=0.2, label='c')

# 图例的显示位置
plt.legend(loc='upper right')
# x轴上面坐标数字替换为文字
plt.xticks(index + 0.2, people)
# y轴的数据范围
plt.ylim(0, 160)

plt.show()


         

饼状图

import matplotlib.pyplot as plt
import matplotlib

matplotlib.rcParams['font.family'] = 'SimHei'
plt.title("各学科喜欢人数统计")

nationalities = ['体育', '英语', '语文', '历史']
students = [60, 23, 21, 34]

# 排序
pairs = zip(students, nationalities)
pairs = sorted(list(pairs))
students, nationalities = zip(*pairs)

# autopct显示百分比,counterclock倒置,shadow是否有背影,explode重点突出哪部分
# plt.pie(students)
# plt.pie(students, labels=nationalities)
# plt.pie(students, labels=nationalities, autopct='%.2f%%')
# plt.pie(students, labels=nationalities, autopct='%.2f%%', counterclock=False)
# plt.pie(students, labels=nationalities, autopct='%.2f%%', counterclock=False, startangle=90)
# plt.pie(students, labels=nationalities, autopct='%.2f%%', shadow=True)
explode = [0, 0, 0.1, 0]
plt.pie(students, labels=nationalities, autopct='%.2f%%', explode=explode)

plt.show()

频次直方图

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.title('学生身高统计')
plt.xlabel('身高')
plt.ylabel('人数')
plt.grid(True)

# 随机出来一组数据,让其服从正太分布
mu, sigma = 172, 8
x = mu + sigma * np.random.randn(10000)

# 100可视化x轴上100个点,density用来指定概率密度【面积和为1】
plt.hist(x, 100, facecolor='b')
# plt.hist(x, 100, facecolor='b', density=True)

plt.show()

3D图形

示例1

import numpy as np
import matplotlib.pyplot as plt

# 创建一个具有3D坐标轴的图形
ax = plt.axes(projection='3d')

# 一个轴作为输入,另外两个轴是根据输入计算出来的
z = np.linspace(0, 30, 100)
x = np.sin(z)
y = np.cos(z)
ax.plot3D(x, y, z)

plt.show()


示例2

import numpy as np
import matplotlib.pyplot as plt

ax = plt.axes(projection='3d')


# 两个轴作为输入,第三个轴是根据前俩个轴计算出来的
def z_function(x, y):
return np.sin(np.sqrt(x ** 2 + y ** 2))


x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)

X, Y = np.meshgrid(x, y)
Z = z_function(X, Y)
ax.plot_surface(X, Y, Z)

plt.show()            
          

 

你可能感兴趣的:(人工智能,matplotlib)