T1
使用matplotlib绘制如下函数,
f(x)=[sin(x-2)]2*e(-x^2)
其中x的取值范围为[0, 2]。
要求:
(a) 编写Python代码
(b) 在图中添加合适的轴刻度、轴标签和图名等,并展示结果
思路
计算:
x = np.linspace(0, 2, 400) :创建了一个从 0 到 2 之间的 400 个均匀分布的点,用于定义自变量 x 的取值范围。这将用于绘制连续的曲线。
绘图:
plt.plot(x, y, label=...) :将 x 和 y 的值绘制成曲线。label 用于设置图例的显示文本,使用 LaTeX 格式显示函数形式,color='b' 设置曲线颜色为蓝色。
y = (np.sin(x - 2))**2 * np.exp(-1*x**2):使用numpy计算y的值。
设置轴的范围:
plt.xlim(0, 2)限制 x 轴的显示范围为 0 到 2。
plt.ylim(0, max(y) * 1.1) 限制 y 轴的显示范围,使其从 0 开始,上限略高于 y 的最大值,以便给图像留出空间。
结果

T2
根据mrbook.xlsx文件中的数据绘制双y轴可视化数据分析表。
思路
-
初始化环境与读取数据
- 设置中文字体支持,确保负号可以正确显示。
- 读取 Excel 文件
mrbook.xlsx的数据,并打印前几行,以快速了解数据结构。数据包含“月份” (x)、销量 (y1)、增长率 (y2) 三列。
-
创建图表框架
- 使用
fig, ax1 = plt.subplots()创建一个新的图表和主轴 (ax1)。ax1将用于显示销量数据。
- 使用
-
绘制第一个Y轴数据
- 在
ax1上绘制销量数据(y1),以柱状图的形式展示销量随月份的变化。 - 设置
ax1的 Y 轴标签为“销量(册)”,颜色为蓝色,并将 Y 轴刻度标签设置为黑色。
- 在
-
添加第二个Y轴
- 通过
ax1.twinx()创建第二个 Y 轴 (ax2),与ax1共享 X 轴。 - 使用折线图在
ax2上绘制增长率数据(y2),并将 Y 轴标签设置为“增长率”。 - 为增长率数据添加数据点标注,以红色显示数值,并在图上通过
ax2.annotate()标出增长率的数值。
- 通过
结果

T3
根据mrtb_data.xlsx文件中的数据绘制堆叠柱状图。
思路
-
初始化与数据读取
- 设置列名
header,以便从Excel文件中读取并清晰识别每个字段。 - 使用
pd.read_excel读取数据文件mrtb_data.xlsx,并指定header,确保数据正确加载到df。
- 设置列名
-
数据清理和分组
- 从数据框中选择相关列(类别、性别、总金额)。
- 根据类别和性别对
总金额进行分组,并对每组的总金额求和。 - 通过
unstack()将性别作为列标签,形成一个包含类别、性别和累计金额的表格,并使用fillna(0)填充缺失值。
# 处理图表数据 cleaned = df[['类别', '性别', '总金额']] grouped = cleaned.groupby(['类别', '性别'])['总金额'].sum().unstack().fillna(0) -
设置绘图配置和创建图表
- 设置中文字体支持,确保中文能够正常显示。
- 创建一个
fig和ax对象,定义绘图的尺寸。 - 设定每个堆叠柱状图的宽度和堆叠之间的间隙。
# 绘制图片 plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文,防止中文显示不出来 fig, ax = plt.subplots(figsize=(10, 6)) # 定义宽度和位置 bar_width = 0.8 # 每个类别的总宽度 gap = 0.1 # 每个堆叠之间的间隙 -
绘制堆叠柱状图与数值标注
- 使用循环绘制“男”和“女”两个类别的堆叠柱状图,并设置不同的颜色。
- 对每个性别的数值进行堆叠,并在柱状图顶部显示数值。
- 使用
ax.text()在每个柱子上方添加标注,显示累计金额的数值。
# 绘制堆叠柱状图 for i, gender in enumerate(['女', '男']): ax.bar(grouped.index, grouped[gender], width=bar_width, label=gender, bottom=grouped.iloc[:, :i].sum(axis=1), linewidth=0.5, edgecolor='white', zorder=3) # 在每个堆叠条形的顶部显示数值 for i, gender in enumerate(['女', '男']): for idx, val in enumerate(grouped[gender]): height = grouped.iloc[idx, :i].sum() + val ax.text(idx, height + gap, f'{val:.0f}', ha='center', va='bottom', zorder=5) -
图表美化与显示
- 设置 x 轴的刻度位置和标签,使标签旋转以便于阅读。
- 设置背景颜色为粉色,添加白色网格线并修改边框颜色为白色。
- 去除 x 轴和 y 轴的刻度线,但保留刻度值。
- 添加标题和 y 轴标签,显示图例,并最终调用
plt.show()显示图表。
# 设置 x 轴的刻度位置和标签,标签斜着显示 ax.set_xticks(range(len(grouped.index))) ax.set_xticklabels(grouped.index, rotation=30, ha='right') # 设置背景颜色为粉色 ax.set_facecolor('lightpink') # 添加白色网格线 ax.grid(True, which='both', linestyle='-', linewidth=0.5, color='white', zorder=0) # 设置表格边框为白色 ax.spines['top'].set_color('white') ax.spines['right'].set_color('white') ax.spines['left'].set_color('white') ax.spines['bottom'].set_color('white') # 去掉 x 轴和 y 轴的刻度线,但保留刻度值 ax.tick_params(axis='x', which='both', length=0) ax.tick_params(axis='y', which='both', length=0) # 添加标题和轴标签 plt.ylabel('男女分布') # 显示图例 plt.legend(['女性用户', '男性用户']) # 显示图形 plt.tight_layout() plt.show()
结果


被折叠的 条评论
为什么被折叠?



