目录
一、作用
二、安装环境
(一)虚拟环境终端
(二)代码导入库
(三)设置中文
1. 使用window自带(推荐)
2. 下载字体
三、应用
(一)基础知识
1. plt.plot()
(1)折线图的画图样式
(2)设置颜色
(3)设置标记符号
(4)设置线型
2. plt.show()
3. plt.figure()
4. plt.title()
5. plt.xlabel() & plt.ylabel()
6. plt.tight_layout()
(二)多个子图
1. plt.subplots()
2. figure对象的add_subplots
3. figure对象的add_axes
4. 设置子图样式
(二)图形实例
1. 折线图 plot
(1)代码
(2)效果图
2. 条形图 bar
(1)代码
(2)效果图
3. 饼图 pie
(1)代码
(4)效果图
4. 折线图&条形图
(1)代码
(2)效果图
一、作用
Matplotlib 是 Python 的绘图库。
二、安装环境
(一)虚拟环境终端
pip install matplotlib
(二)代码导入库
import matplotlib.pyplot as plt
(三)设置中文
默认不支持中文。
1. 使用window自带(推荐)
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
2. 下载字体
下载某字体文件并放在项目里。
网址(任选一个字体):https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese
代码:
每个有中文显示的地方,都需要设置fontproperties。
import matplotlib
zhfont = matplotlib.font_manager.FontProperties(fname="../项目名/应用app名/static/font/SourceHanSansSC-Regular.otf")
plt.title("书籍出售情况", fontproperties=zhfont) # 图表标题
plt.xlabel("出售书籍", fontproperties=zhfont) # 横坐标轴标签
plt.legend(loc='upper left', prop=zhfont) # 显示图例(一定要在plot的后面)
plt.xticks(list(books)[::3], rotation=45, fontproperties=zhfont) # 设置横坐标数据样式:[::3] 间隔3个显示一次;rotation 文字旋转度数;fontproperties设置中文字体
三、应用
(一)基础知识
1. plt.plot()
(1)折线图的画图样式
plt.plot(x轴数据, y轴数据, color='red', marker='o', linestyle='--', label='值标签') # 画图
plt.plot(x轴数据, y轴数据, 'g+', label='值标签') # 画图。其中g+表示color&marker
(2)设置颜色
① 'r'、'y'、'g'、'c'、'b'、'k'、'w'(红、黄、绿、青、蓝、黑、白)
② 'red'等全称
③ 十六进制或RGBA格式
(3)设置标记符号
点'.'、圆圈'o'、三角'v'、方块's'、星'*'、六角形'h'、加号'+'、菱形'd'
(4)设置线型
实线'-'、虚线'--'、虚点'-.'、点线':'
2. plt.show()
显示画布
3. plt.figure()
新建图形(画布)对象
fig = plt.figure(figsize=(5,3), facecolor='pink') # figsize设置画布宽高;facecolor设置背景色
4. plt.title()
设置图表标题
plt.title("Matplotlib demo") # 图表标题
5. plt.xlabel() & plt.ylabel()
设置坐标轴标签
plt.xlabel("出售书籍") # x轴标签
plt.ylabel("价格(¥)") # y轴标签
6. plt.tight_layout()
处理标题遮挡
(二)多个子图
1. plt.subplots()
创建多个子图
fig,axes=plt.subplots(2,2) # 画布子图分区(2*2个区域)
ax1=axes[0,0] # 设置子图1在0,0的位置(其中,0,0表示从左往右,逐行排序的第1个位置)
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 子图数据
ax2=axes[0,1] # 设置分区2在0,1的位置(其中,0,1表示从左往右,逐行排序的第2个位置)
ax2.plot([1,3,5,7,9], [-1,2,-3,4,-5]) # 子图数据
ax2.grid(color='g', linestyle='--', linewidth=1,alpha=0.3) # 子图样式
ax2.legend(prop={'size': 10})
plt.show()
2. figure对象的add_subplots
创建多个子图(固定行列)
fig = plt.figure(figsize=(5,3), facecolor='pink') # 创建图形对象。figsize设置画布宽高;facecolor设置背景色
ax1 = fig.add_subplot(2,2,1) # 第一个位置
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 分区1数据
ax2 = fig.add_subplot(2,2,4) # 第四个位置
ax2.plot([1,2,3,4,5], [-1,-2,-3,-4,-5]) # 分区2数据
plt.show()
3. figure对象的add_axes
创建多个子图(百分比布局)
fig = plt.figure() # 创建图形对象
ax1=fig.add_subplot(1,2,2) # 设置主图1*2的第2个位置
ax1.plot([1,2,3,4,5], [1,2,3,4,5]) # 数据
ax1.set_title('主图') # 标题
ax2 = fig.add_axes([0.64,0.68,0.1,0.1]) # 设置子图,add_axes中阵列含义:[距离左64%,距离底68%,宽10%,高10%]
ax2.plot([0.1,0.2,0.3,0.4,0.5], [0.1,0.2,0.3,0.4,0.5], 'r') # 数据
ax2.set_title('图中图') # 标题
plt.show()
4. 设置子图样式
fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.set_title('Matplotlib demo') # 标题
ax1.set_xlabel('书籍') # 设置子图的x轴标签
ax1.set_ylabel('价格') # 设置子图的y轴标签
# ax1.set_xticks([1, 2, 3]) # 设置x轴刻度
ax1.set_yticks([0,20,40,60,80]) # 设置y轴刻度
# ax1.set_xlim(0,100) # 设置x轴取值范围
ax1.set_ylim(0,100) # 设置y轴取值范围
ax1.set_xticklabels(['科幻','教育','文学']) # 设置 x 轴刻度标签
(二)图形实例
1. 折线图 plot
(1)代码
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
def get_data():
books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理'] # x轴的数据
prices = [40,10,60,80] # y轴的数据
actual_prices = [50,95,80,45] # y轴的数据
plt.plot(books, prices, color='red', marker='o', linestyle='--', label='预售价') # 画图
plt.plot(books, actual_prices, color='blue', marker='.', linestyle='solid', label='实际售价') # 画图
plt.title("Matplotlib demo") # 图表标题
plt.xlabel("出售书籍") # x轴轴标签
plt.ylabel("价格(¥)") # y轴轴标签
plt.ylim(20,100) # 控制Y轴的显示范围
plt.legend(loc='upper left') # 显示图例(一定要在plot的后面)
plt.xticks(list(books)[::3], rotation=45) # 设置x轴刻度样式:[::3] 间隔3个显示一次;rotation 文字旋转度数;fontproperties设置中文字体
plt.show()
if __name__ == "__main__":
get_data()
(2)效果图
2. 条形图 bar
(1)代码
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rc("font", family='Microsoft YaHei')
def get_data():
fig, ax = plt.subplots(figsize=(4,3), layout='constrained')
books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理'] # 横坐标的数据
prices = [40,10,60,80] # 纵坐标的数据
ax.set(ylim=(0, 90))
ax.bar(books, prices)
plt.show()
if __name__ == "__main__":
get_data()
(2)效果图
3. 饼图 pie
(1)代码
pie_data = [10, 20, 30, 80]
colors = plt.get_cmap('Blues')(np.linspace(0.2, 0.9, len(pie_data))) # 根据饼图数据设置渐变颜色
fig, ax = plt.subplots()
labels = ['科幻', '科学', '文学', '教育']
wedges, texts, autotexts = ax.pie(pie_data, # 饼图数据
colors=colors, # 饼图渐变色
radius=3, # 饼图半径
center=(4, 4), # 饼图的圆中心位置
wedgeprops={"linewidth": 1, "edgecolor": "white"}, # 分块边界线样式
frame=True, # 显示坐标轴
textprops=dict(color='r'), # 文本颜色
labels=labels, # 显示每块标题标签
autopct='%.2f%%', # 展示每块百分比值;若要用autopct属性,则pie()方法回传的变量有三个
shadow=True, # 显示阴影
startangle=30 # 分块起始角度(x轴正向计算度数,逆时针)
)
ax.set(xlim=(0, 8), xticks=np.arange(1, 8), # 设置x轴的刻度范围
ylim=(0, 8), yticks=np.arange(1, 8)) # 设置y轴的刻度范围
ax.legend(wedges, # 图例的标签颜色
labels, # 图例的标签数据
title="demo", # 图例标题
loc="center left",
bbox_to_anchor=(1, 0.5, 0, 0) # (x, y, width, height)
) # 图例
plt.show()
(4)效果图
4. 折线图&条形图
(1)代码
books = ['数据结构', '数据库原理', '操作系统', '计算机组成原理'] # x轴的数据
prices = [40,10,60,80] # y轴的数据
actual_prices = [50,95,80,45] # y轴的数据
plt.plot(books, prices, color='red', marker='o', linestyle='--', label='预售价') # 折线图
plt.bar(books, actual_prices, color='blue', label='实际售价') # 条形图
plt.title("Matplotlib demo") # 图表标题
plt.xlabel("出售书籍") # x轴轴标签
plt.ylabel("价格(¥)") # y轴轴标签
plt.ylim(0,100) # 控制Y轴的显示范围
plt.legend(loc='upper left') # 显示图例(一定要在plot的后面)
plt.xticks(list(books)[::1], rotation=0) # 设置x轴刻度样式:[::1] 间隔1个显示一次;rotation 文字旋转度数;fontproperties设置中文字体
plt.show()