python画图|3D bar进阶探索

前述学习过程只能怪,已经探究了3D直方图的基础教程,详见下述链接:

python画图|3D直方图基础教程-优快云博客

实际上,基础文章直接进入了堆叠教程,相对来说基础的程度不够,因此有必要再次探索。

【1】官网教程

首先还是来到官网,学习官方的教程:

bar3d(x, y, z, dx, dy, dz) — Matplotlib 3.9.2 documentation

教程非常简洁,我们做一下解读。

【2】代码解读

首先是numpy和matplotlib的引入:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

然后对图形风格做了指引,暂不作为解读重点:

plt.style.use('_mpl-gallery') #设置画图颜色等风格

然后定义了变量:

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [0, 0, 0, 0] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [2, 3, 1, 4] #dz的结果

这段代码相对简单,需要注意的是:

dx = np.ones_like( )的功能是:输出全是1的数组,数组的维度和like()括号中的数组一致。

dx = np.ones_like(x)输出全是1的数组,数组的维度和x的维度(1X4)一致为测试这个功能,输入以下代码后运行:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算

plt.style.use('_mpl-gallery') #设置画图颜色等风格

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [0, 0, 0, 0] #定义变量
dx = np.ones_like(x)*0.5
dy = np.ones_like(x)*0.5
dz = [2, 3, 1, 4]

print('np.ones_like(x)=\n',np.ones_like(x))

输出结果为:

np.ones_like(x)=
 [1 1 1 1]

再之后,就定义了要画3D直方图:

# Plot
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) #定义要画3D图
ax.bar3d(x, y, z, dx, dy, dz) #定义画3D直方图

 其中,ax.bar3d(x, y, z, dx, dy, dz)函数,(x, y, z,)代表了需要绘制的3个坐标,(dx, dy, dz)代表了每个直方图的长度、宽度和高度。

最后设置了坐标轴和进行图形输出:

ax.set(xticklabels=[],
       yticklabels=[],
       zticklabels=[])  #设置坐标轴

plt.show() #输出图形

输出结果为:

图1

【3】修改代码

【3.1】显示坐标轴刻度

图1虽然画出了3D直方图,但坐标轴没有刻度尺寸。因此尝试修改坐标轴属性代码,使坐标轴显示刻度尺寸。

将ax.set部分拆开,写成下述形式:

ax.set_xticklabels=([])  #设置坐标轴
ax.set_yticklabels=([])
ax.set_zticklabels=([])  #设置坐标轴

此时的输出结果为:

图2

由图2可见,输出结果显示了坐标轴刻度标签。

【3.2】显示坐标轴标签

图2虽然显示了坐标轴刻度尺寸,但没有显示各个轴的名称,因此有必要继续增加代码,显示轴标签:

ax.set_xlabel("x", color="g", fontsize=20) #设置x轴标签
ax.set_ylabel("y", color="g", fontsize=20) #设置y轴标签
ax.set_zlabel("z", color="g", fontsize=20) #设置z轴标签

plt.show() #输出图形

此时的输出结果为:

图3

图3显示了坐标轴标签。

【4】改写代码

 前述图形对3D直方图做了一些完善,但实际上可修改的地方还很多。由于明显的修改将会显著区别于官网图形,因此要重新开一个章节。

首先,将最先约束画图风格的代码改为注释:

#plt.style.use('_mpl-gallery') #设置画图颜色等风格

然后,给3dbar设置颜色:

ax.bar3d(x, y, z, dx, dy, dz,color='y',alpha=0.58) #定义画3D直方图

这里的 color='y'表示图形为黄色;alpha=0.58表示不透明度,alpha越大越不透明,1为完全不透明。

再然后把变量做修改,使其尽可能有区别:

x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [3,5,6,5] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [1,2,3,4] #dz的结果

再给图形加一个名称:

ax.set_title('3Dbar')

此时的输出图形为:

图4

由图4可以看到不同的方块似乎起始高度不一样,因此尝试改变试图角度:

图5

此时非常清晰,方块的起始高度是z = [3,5,6,5],然后方块的具体高度是dz = [1,2,3,4] 。

至此的完整代码为:

import matplotlib.pyplot as plt  #引入matplotlib模块画图
import numpy as np #引入numpy模块做数学计算
from scipy.ndimage import label
from sympy.abc import alpha

#plt.style.use('_mpl-gallery') #设置画图颜色等风格

# Make data
x = [1, 1, 2, 2] #定义变量
y = [1, 2, 1, 2] #定义变量
z = [3,5,6,5] #定义变量
dx = np.ones_like(x)*0.5 #dx的输出结果都是0.5,和x的维度一致
dy = np.ones_like(x)*0.5 #dy的输出结果都是0.5,和x的维度一致
dz = [1,2,3,4] #dz的结果

# Plot
fig, ax = plt.subplots(subplot_kw={"projection": "3d"}) #定义要画3D图
ax.bar3d(x, y, z, dx, dy, dz,color='y',alpha=0.58) #定义画3D直方图

#ax.set(xticklabels=[],
#      yticklabels=[],
#      zticklabels=[]
#      )
ax.set_xticklabels=([])  #设置坐标轴
ax.set_yticklabels=([])
ax.set_zticklabels=([])  #设置坐标轴
ax.set_xlabel("x", color="g", fontsize=20) #设置x轴标签
ax.set_ylabel("y", color="g", fontsize=20) #设置y轴标签
ax.set_zlabel("z", color="g", fontsize=20) #设置z轴标签
ax.set_title('3Dbar')
plt.show() #输出图形

【5】总结

学习了3D直方图的绘制教程,显示了坐标轴刻度标签和名称标签,增加了图名,修改了方块颜色。

<think>好的,我现在需要帮助用户了解如何使用Matplotlib对已有的Pandas DataFrame进行绘图,特别是针对初学者。首先,我得整理一下用户的需求。用户提到了引用中的内容,特别是引用4中的代码示例,其中展示了如何利用Matplotlib结合Pandas DataFrame绘制条形图和散点图。用户可能已经有一些DataFrame的数据,但不知道如何将这些数据转换为图表。 首先,我应该从安装开始吗?不过用户可能已经安装了Matplotlib和Pandas,但可能需要确认环境是否准备好。不过根据引用1,用户可能已经知道如何安装,所以可能不需要详细说明安装步骤,但可以简要提及。 接下来,用户需要的是基本的绘图步骤。根据引用中的示例,比如引用3和4,使用plt.bar和plt.scatter等函数,同时结合DataFrame的列名来绘图。我需要说明如何导入必要的库,比如导入matplotlib.pyplot as plt和pandas as pd,然后如何准备数据。可能应该给出一个简单的DataFrame示例,比如创建一个包含学生数据的DataFrame,包括学号、语文成绩、数学成绩等,这样用户容易理解。 然后,展示如何绘制基本图表,比如条形图和散点图。需要强调在使用Matplotlib绘图时,如何直接引用DataFrame的列名,例如在plt.bar中使用x="学号", height="语文", data=df1这样的参数,这样可以避免直接处理索引,使代码更简洁。引用4中的例子正好展示了这一点,所以应该引用这个例子来说明。 此外,用户可能对如何设置图表标题、轴标签、图例等基本元素有疑问。引用3中的示例设置了xlabel、ylabel和title,这需要详细说明。比如在条形图中如何添加这些元素,以及如何显示图例,比如在plt.bar中使用label参数,然后调用plt.legend()。 可能还需要介绍子图的绘制方法,如引用4中的fig.add_subplot,这可以让用户在同一图像中绘制多个图表。但作为初学者教程,可能需要先介绍单一图表,再稍微提及子图的创建,不过根据用户的问题,可能暂时不需要深入子图,但引用4中有相关代码,可能需要简单说明。 另外,用户可能需要了解如何处理不同的图表类型,比如折线图、散点图、柱状图等,如何选择正确的函数。比如使用plt.plot()绘制折线图,plt.scatter()绘制散点图,plt.bar()绘制柱状图等。可以结合引用中的例子,比如引用3的条形图和引用4的散点图,来展示不同图表的使用方法。 同时,需要注意代码的结构,比如先创建数据,然后绘图,再添加标签和标题,最后显示图表。在示例中,需要确保代码正确,比如正确使用data参数,以及列名的引用。可能还需要提到如何调整图表的大小,比如使用plt.figure(figsize=(...)),如引用4中的例子,但作为基础教程,这可能属于进阶内容,可以简要提及。 最后,生成相关问题,引导用户进一步学习,比如如何自定义图表样式、保存图表、处理多个数据集等。这些问题应该与用户当前的问题相关,帮助他们逐步深入。 总结一下,回答的结构应该是:导入库,准备数据(创建示例DataFrame),绘制基本图表(条形图、散点图),设置图表元素(标签、标题、图例),显示图表,并引用相关示例。同时,确保代码正确,符合Matplotlib和Pandas的使用规范,并自然地添加引用标识。最后生成相关问题,帮助用户扩展知识。</think>[用户可见层] # 使用Matplotlib对Pandas DataFrame绘图的初学者教程 ## 一、环境准备 首先确保已安装所需库: ```python pip install matplotlib pandas ``` 在代码中导入核心库: ```python import matplotlib.pyplot as plt import pandas as pd ``` ## 二、数据准备 创建示例DataFrame: ```python data = { "学号": ["S001", "S002", "S003", "S004"], "语文": [85, 92, 78, 88], "数学": [90, 88, 95, 82], "身高": [165, 173, 168, 180], "体重": [55, 68, 62, 75] } df = pd.DataFrame(data) ``` ## 三、基础绘图方法 ### 1. 条形图绘制 ```python plt.figure(figsize=(8,4)) plt.bar(x="学号", height="语文", data=df, color='skyblue', label='语文成绩') plt.xlabel("学生编号", fontsize=12) plt.ylabel("分数", fontsize=12) plt.title("学生语文成绩分布", fontsize=14) plt.legend() plt.show() ``` ![条形图示例](https://via.placeholder.com/400x300.png/CCCCCC/FFFFFF?text=Bar+Chart+Example) **代码解读:** - 通过`x="学号"`直接指定DataFrame列名 - `height="语文"`定义条形高度数据源 - `data=df`参数关联数据集[^4] ### 2. 散点图绘制 ```python plt.scatter(x="身高", y="体重", data=df, s=80, color='coral') plt.xlabel("身高(cm)", fontsize=12) plt.ylabel("体重(kg)", fontsize=12) plt.title("学生身高体重关系", fontsize=14) plt.grid(True, linestyle='--', alpha=0.7) plt.show() ``` ![散点图示例](https://via.placeholder.com/400x300.png/CCCCCC/FFFFFF?text=Scatter+Plot+Example) **关键参数说明:** - `s=80`:设置点的大小 - `alpha=0.7`:设置网格透明度[^2] ## 四、进阶技巧 ### 1. 多子图绘制 ```python fig = plt.figure(figsize=(12,5)) ax1 = fig.add_subplot(121) ax1.bar(df["学号"], df["数学"], color='lightgreen') ax1.set_title("数学成绩") ax2 = fig.add_subplot(122) ax2.plot(df["学号"], df["语文"], marker='o', color='orange') ax2.set_title("语文趋势") plt.tight_layout() plt.show() ``` ![多子图示例](https://via.placeholder.com/800x300.png/CCCCCC/FFFFFF?text=Subplots+Example) ### 2. 样式美化 ```python plt.style.use('seaborn') # 使用seaborn风格 df.plot(kind='line', x='学号', y=['语文','数学'], marker='o', figsize=(10,5)) plt.title("学科成绩对比") plt.ylabel("分数") plt.show() ``` ![样式美化示例](https://via.placeholder.com/800x300.png/CCCCCC/FFFFFF?text=Styled+Plot+Example) ## 五、最佳实践 1. **数据预处理**:确保DataFrame中不存在空值 2. **标签清晰化**:总为坐标轴添加单位说明 3. **颜色对比**:使用对比色突出关键数据 4. **图表保存**:使用`plt.savefig('filename.png', dpi=300)`保存高清图片[^3]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值