matplotlib绘制图形入门操作:创建画布/调整子图/创建“AXES轴域”/调整子图间的距离/设置XY轴刻度及刻度名称/XY轴标题/图片标题

市面上太多关于matplotlib操作的说明,但是非常的杂,而且根据很多不够准确的地方,根据去官网查看API和其他文章,决定自己整理一份相关内容;为了建立自己的知识树,个人认为matplotlib可以总结成一下几点逻辑关系:
(1)画布figure可以创建一张或者多张(每张画布是可以“单独”保存)
(2)一张画布上可以创建很多个子图subplot,并根据自己的需求对子图的位置进行部署
(3)每张子图都可以绘制一组数据或者多组数据
(4)对数据的表述,个人选择可以分成:数据描述图形(线图,条形图等),数据分布图形(直方图,饼图,文字云,散点图等)

【疑问】有一个概念Axes“域”,个人认为这个“域”可以理解成一对XY轴,我们可以在一张画布上添加多个“域”(看上去好像多个子图一样),具体有什么实际上区别不明白,之后如果学习到了会更新这个内容

本文先对(1),(2)两部分内容进行总结,其中创建子图的问题上介绍5个布局生成子图的函数
附:matplotlib 官网 API :https://matplotlib.org/3.1.1/api/index.html


1. 创建画布:plt.figure()

如上所说,创建画布可以同时创建一个或多个,想在哪个画布上进行布局子图和绘制图形,就在相应的创建画布的代码下进行,功能的介绍如下:

figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True)

参数说明:
(1)num:图像编号或名称,数字为编号 ,字符串为名称
(2)figsize:指定figure的宽和高,单位为英寸;
(3)dpi参数指定绘图对象的分辨率,即每英寸多少个像素,缺省值为80
(4)facecolor:背景颜色
(5)edgecolor:边框颜色
(6)frameon:是否显示边框

# 创建画布
import matplotlib.pyplot as plt

# 创建一个画布,画布序列号为1
fig1=plt.figure()
# 同时创建第二个画布:指定序列号为3;尺寸宽4高3;背景色为蓝(如果不指定序列号则自动增加为2)
fig3=plt.figure(num=3,figsize=(4,3),facecolor='blue')

2. 创建子图:

由于目前使用matplotlib库有限,所以无法理解创建“子图”和创建“轴域”有什么实际区分,个人觉得从图的展示情况看,想部署

可以个人将子图部署的位置分为三种,下面是三种部署的创建方式:

(1)固定行列分布的子图组布局(是否可以修改子图大小形状不确定):plt.subplots()
(2)创建单个子图,形状可以跨列的布局(是否可以跨行不确定):plt.figure().add_subplot()/plt.subplot()
(3)创建单个子图在一个固定行列分布的网格组中,子图形状任意布局:plt.subplot2grid()
(4)子图包含子图的结构:plt.figure().add_axes()

  • plt.subplots()的方法

plt.subplots(nrows=1, ncols=1, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw) :
参数重要参数解释如下:
(1)nrows=1, ncols=1:制作几行列的子图组
(2)sharex=False, sharey=False:子图组中XY轴的刻度是否一致,默认不一致
该方法返回两个值:
(1)fig : Figure
(2)ax : axes.Axes object or array of Axes objects.

实际上是这个函数是将两个函数封装成一个功能,分别是:创建一个 figure和一组子图组。

# 创建一个figure和一个2行2列的子图组
fig,axes=plt.subplots(2,2)
# 划分子图
ax1=axes[0,0]
ax2=axes[0,1]
ax3=axes[1,0]
ax4=axes[1,1]

# 另一种书写方式
f, ((ax11, ax12), (ax13, ax14)) = plt.subplots(2, 2)

在这里插入图片描述

  • plt.figure().add_subplot()的方法与plt.subplot()的方法

.add_subplot(nrows, ncols, index, **kwargs) 和.subplot(nrows, ncols, index, **kwargs) 函数功能是一样的,区别在于:
(1)使用 .add_subplot()函数,首先要先创建一个figure对象,通过对象调用这个函数;.subplot()直接创建
(2).add_subplot()函数实际功能是:“添加Axes到图中作为子图布置的一部分”;而.subplot()则是“在当前图中添加子图”

import matplotlib.pyplot as plt

# 使用plt.figure().add_subplot()创建一个左右两子图的布局
fig = plt.figure() 
ax1 = fig.add_subplot(121)    # 参数书写形式还可以(1,2,1)
ax2 = fig.add_subplot(122) 

# 使用plt.subplot()创建一个:上面一个图,下面两个图的布局
plt.subplot(2,1,1)				# 位置上,相当于占了一整行,“两列”

plt.subplot(2,2,3)				# 第二行,第一列
plt.subplot(2,2,4)				# 第二行,第二列

plt.show()

在这里插入图片描述

  • plt.subplot2grid()方法

plt.subplot2grid(shape,loc,rowspan = 1,colspan = 1,fig = None,** kwargs )的主要参数解释如下:
a. shape : 制作几行几列的子图布局
b. loc : 当前子图的位置在哪行哪列
c. rowspan : 跨几行
d. colspan : 跨几列

import matplotlib.pyplot as plt

# 创建一个3行3列的子图格,该子图位于0行0列的位置,跨3列
ax1 = plt.subplot2grid((3, 3), (0, 0), colspan=3)  # stands for axes
# 创建一个3行3列的子图格,该子图位于1行0列的位置,跨2列
ax2 = plt.subplot2grid((3, 3), (1, 0), colspan=2)
# 创建一个3行3列的子图格,该子图位于1行2列的位置,跨2行(1行中的0和1索引的列被ax2填充)
ax3 = plt.subplot2grid((3, 3), (1, 2), rowspan=2)
ax4 = plt.subplot2grid((3, 3), (2, 0))
ax5 = plt.subplot2grid((3, 3), (2, 1))

在这里插入图片描述

  • plt.figure().add_axes()方法

想使用.add_axes()函数新增子区域,则需要先创建一个figure的对象,在通过对象调用函数;
该函数的功能是:“Add an axes to the figure” 即新增子区域指定在画布内任意位置,且可以按画布的比例设置子区域大小。
.add_axes([left, bottom, width, height]) 具体参数如下:
left, bottom表示左边以及下边的起始位置,width, heigh表示宽高延伸原fig的比例。

import matplotlib.pyplot as plt

# 首先需要创建一个画布的对象
fig = plt.figure()

# 子区域从figure 10%的位置开始绘制, 宽高延伸figure的80%
left, bottom, width, height = 0.1, 0.1, 0.8, 0.8
ax1 = fig.add_axes([left, bottom, width, height])  # main axes

# 子区域从figure 20%+60% 的位置开始绘制, 宽高增长figure的25%
ax2 = fig.add_axes([0.2, 0.6, 0.25, 0.25])  # inside axes

在这里插入图片描述

3. 调整子图间的距离:plt.subplots_adjust()

subplots_adjust(left = None,bottom = None,right = None,top = None,wspace = None,hspace = None )
参数默认值及解释:
(1)left = 0.125 :the left side of the subplots of the figure
(2)right = 0.9:the right side of the subplots of the figure
(3)bottom = 0.1:the bottom of the subplots of the figure
(4)top = 0.9:the top of the subplots of the figure
(5)wspace = 0.2 : the amount of width reserved for space between subplots, expressed as a fraction of the average axis width
(6)hspace = 0.2:the amount of height reserved for space between subplots, expressed as a fraction of the average axis height

4. 设置XY轴刻度及刻度名称/XY轴标题/图片标题

  • XY轴刻度及刻度名称

同样有两种情况:只有画布;创建了子图对象或者“域”对象

months = range(12)
month_names = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep","Oct", "Nov", "Dec"]

# 只有画布
plt.xticks(months,month_names)
plt.yticks([0.10, 0.25, 0.5, 0.75],['10%', '25%', '50%', '75%'])

# ax=plt.subplot()
ax.set_xticks(months)		# 设置X轴刻度值
ax.set_xticklabels(month_names)		# 匹配X轴刻度名字

ax.set_yticks([0.10, 0.25, 0.5, 0.75])		# 设置Y轴刻度值
ax.set_yticklabels(['10%', '25%', '50%', '75%'])		# 匹配Y轴刻度名
  • 设置XY轴名称

同样有两种情况:只有画布;创建了子图对象或者“域”对象

# 只有画布
plt.xlabel("Months")
plt.ylabel('Conversion')

# 创建了子图对象或者“域”对象
ax.set_xlabel("Months")
ax.set_ylabel('Conversion')
  • 设置标题

同样有两种情况:只有画布;创建了子图对象或者“域”对象

# 只有画布时
plt.title('My Last Twelve Years of Coffee Drinking')

# 创建了子图对象或者“域”对象
ax.set_titel("My Last Twelve Years of Coffee Drinking")
<think>好的,用户想了解用Python的Matplotlib绘制柱状的基本思路和相关方法,特别是设置图形属性和文本标注。首先,我需要回顾Matplotlib绘制柱状的基本步骤,通常会用`bar()`或者`barh()`函数。然后要考虑如何设置图形属性,比如颜色、宽度、标签等。文本标注方面,可能需要用到`text()`函数或者`annotate()`方法。接下来,我需要检查用户提供的引用内容。引用[1]提到了绘制柱状的实战,包括水平、垂直、分组和堆叠条形,还涉及了`plt.rcParams`的设置,这可能涉及到图形的大小和分辨率。引用[2]虽然主要讲雷达,但提到了`subplot()`的使用,这在多布局中可能对柱状也有帮助。用户的问题可能还关注代码示例和具体参数的说明。比如,如何设置条形的颜色、调整距,添加标题标签,以及如何添加数据标签。需要确保步骤清晰,从导入库、生成数据、创建表、设置属性到添加标注,每一步都要解释清楚。可能还需要注意常见问题,比如中文显示的问题,或者如何保存像。此外,用户可能想知道如何优化表的美观性,比如使用不同的样式或调整坐标范围。需要结合引用中的信息,比如`plt.rcParams`的设置调整图形大小和DPI,确保输出像清晰。最后,生成相关问题时要围绕柱状的扩展应用,比如不同类型条形的实现、样式定制、动态数据更新,以及与其他表的结合使用。这些问题可以帮助用户进一步探索Matplotlib的功能。</think>### Python Matplotlib绘制柱状详解 #### 一、基本思路 1. **数据准备**:明确数据结构和可视化目标(如比较、分布分析) 2. **画布创建**:通过`plt.figure()`或`plt.subplots()`建立画布 3. **绘制主体**:使用`bar()`绘制垂直柱状,`barh()`绘制水平柱状 4. **属性设置**:调整颜色、宽度、标签等图形属性 5. **文本标注**:添加数据标签、注释说明 6. **输出展示**:通过`plt.show()`或`plt.savefig()`输出结果 #### 二、核心方法及参数 ```python import matplotlib.pyplot as plt import numpy as np # 1. 数据生成(示例) categories = ['A', 'B', 'C', 'D'] values = [25, 33, 19, 40] # 2. 创建画布 fig, ax = plt.subplots(figsize=(8,6)) # 引用[1]中提到的尺寸设置 # 3. 绘制柱状 bars = ax.bar( x = categories, height = values, width = 0.6, # 柱宽度 color = '#4C72B0', # 统一颜色 edgecolor='black', # 边框颜色 alpha=0.8 # 透明度 ) # 4. 设置图形属性 ax.set_title('示例柱状', fontsize=14) ax.set_xlabel('类别', fontsize=12) ax.set_ylabel('数值', fontsize=12) ax.grid(axis='y', linestyle='--', alpha=0.7) # 网格线 # 5. 添加文本标注 for bar in bars: height = bar.get_height() ax.text( x = bar.get_x() + bar.get_width()/2, y = height + 0.5, s = f'{height}', ha='center', va='bottom' ) plt.tight_layout() # 自动调整布局 plt.show() ``` #### 三、关键设置项说明 1. **颜色设置**: - `color`: 支持颜色名称、十六进制值、RGB元组 - 多颜色设置:传递颜色列表`color=['#4C72B0','#55A868','#C44E52']` 2. **坐标定制**: ```python ax.set_xticks(np.arange(len(categories))) # 精确控制刻度位置 ax.set_xticklabels(categories, rotation=45) # 旋转标签 ax.set_ylim(0, 50) # 设置Y范围 ``` 3. **高级标注方法**: ```python ax.annotate('最大值', xy=(3, 40), xytext=(3.5, 45), arrowprops=dict(arrowstyle='->')) ``` 4. **样式模板**: ```python plt.style.use('ggplot') # 使用内置样式 ``` #### 四、注意事项 1. 中文显示需额外配置: ```python plt.rcParams['font.sans-serif'] = ['SimHei'] # 设置中文字体 plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题 ``` 2. 大数据集建议: - 降低透明度`alpha=0.5` - 移除边框`edgecolor=None` - 简化标签内容
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值