重要性 ★★★★☆
难度 ★★★☆☆
作为零售公司的数据分析师,你需要比较两个季度的销售业绩。公司已提供 Q1 和 Q2 各产品类别的销售数据,现在要创建一张哑铃点图,直观展示每个品类在两个季度间的销售变化。这张图需要清晰呈现两个季度的数值以及它们之间的差异。接下来使用 Python 生成样本数据、完成处理并绘图,整个过程要加上合适的标签和格式,让图表易于解读。
数据生成代码示例
import pandas as pd
import numpy as np
np.random.seed(42)
categories = ['Electronics', 'Clothing', 'Home', 'Books', 'Sports', 'Food']
q1_sales = np.random.randint(100, 1000, len(categories))
q2_sales = q1_sales + np.random.randint(-200, 400, len(categories))
data = pd.DataFrame({'Category': categories, 'Q1_Sales': q1_sales, 'Q2_Sales': q2_sales})
图表答案

代码答案
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
np.random.seed(42)
categories = ['Electronics', 'Clothing', 'Home', 'Books', 'Sports', 'Food']
q1_sales = np.random.randint(100, 1000, len(categories))
q2_sales = q1_sales + np.random.randint(-200, 400, len(categories))
data = pd.DataFrame({'Category': categories, 'Q1_Sales': q1_sales, 'Q2_Sales': q2_sales})
fig, ax = plt.subplots(figsize=(10, 6))
y_positions = range(len(categories))
# Plot lines connecting Q1 and Q2 sales
[plt.plot([row.Q1_Sales, row.Q2_Sales], [i, i], 'o-', color='gray', linewidth=1) for i, row in data.iterrows()]
# Plot Q1 sales (blue dots)
ax.scatter(data['Q1_Sales'], y_positions, color='blue', s=50, label='Q1 销售额')
# Plot Q2 sales (red dots)
ax.scatter(data['Q2_Sales'], y_positions, color='red', s=50, label='Q2 销售额')
# Set y-axis labels and ticks
ax.set_yticks(y_positions)
ax.set_yticklabels(categories)
# Set labels and title
ax.set_xlabel('销售额($)')
ax.set_title('Q1 与 Q2 销售额对比')
ax.legend()
# Add grid lines
ax.grid(True, axis='x', linestyle='--', alpha=0.7)
# Adjust layout and display plot
plt.tight_layout()
plt.show()

这段代码创建了一个哑铃点图,用于比较不同产品类别在两个季度之间的销售数据。以下是数据处理和可视化的详细步骤。
数据生成
使用 NumPy 为 Q1 和 Q2 生成随机销售数据。np.random.seed(42) 确保随机数据可重复,接着创建 pandas DataFrame 来存储类别名称和销售数据。
图表设置
使用 matplotlib 创建图表,设置图表大小为 10×6 英寸,并创建 y_positions 变量来确定每个类别的垂直位置。
绘制哑铃线
通过 plt.plot() 配合列表推导式,为每个类别绘制连接 Q1 和 Q2 销售的线段。这些线为灰色,两端带有圆形标记。
绘制销售点
使用 ax.scatter() 将 Q1 销售额绘制为蓝色点,Q2 销售额绘制为红色点,参数 s=50 设置点的大小。
Y 轴格式化
将 Y 轴刻度设置为与 y_positions 匹配,并用类别名称标记这些刻度。
标签和标题
添加 X 轴标签“销售额($)”,设置图表标题,并添加图例以区分 Q1 和 Q2 销售额。
网格线
添加垂直虚线网格,便于读取具体销售数值。
最终调整
使用 plt.tight_layout() 自动调整图表布局,最后通过 plt.show() 显示图表。
这种可视化技巧能有效展示每个产品类别从 Q1 到 Q2 的销售变化。哑铃形状便于比较两个数值,连接线的长度对应变化幅度;蓝红颜色编码进一步提升了图表的可读性。
小知识
- 哑铃图(也称为 DNA 图或杠铃图)非常适合比较多个类别中的两个相关数值。
- 这种图表因其外观类似哑铃而得名:两个数据点由一条线连接。
- 哑铃图特别适用于商业环境中的前后对比,例如不同时间段的销售业绩。
- 在数据科学中,
np.random.seed() 技术至关重要,它能保证可重复性,让别人也能生成相同的“随机”数据。
- matplotlib 高度可定制,除了哑铃图外,还可以创建各种统计图形。
- 在数据可视化中,“小倍数”原则(为不同类别重复相同的图表类型)同样适用于哑铃图。
- 本示例中的 pandas DataFrame 展示了其在处理结构化数据方面的多功能性,无论是分析还是可视化任务都能胜任。