Matplotlib 如何使散点图成组透明化
阅读更多:Matplotlib 教程
背景
当在 matplotlib 中绘制散点图时,我们经常希望用不同颜色表示不同的数据分组,以便更清晰地识别出它们。同时,我们也会希望将这些数据点透明化,以便更好地观察它们的交叉与覆盖情况。
比如说,我们有两组数据,分别包含了 A、B 两种物品的数量,其中 A 组数据用红色表示,B 组数据用绿色表示。我们希望将它们在同一个图中绘制出来,并且覆盖时能够更直观地看出它们的分布规律。
解决方案
使用 matplotlib 绘制散点图时,我们可以通过调用 scatter
函数来实现:
import matplotlib.pyplot as plt
x1 = [1,2,3,4,5]
y1 = [3,2,4,1,5]
x2 = [3,4,5,6,7]
y2 = [9,8,7,5,6]
plt.scatter(x1, y1, color='r')
plt.scatter(x2, y2, color='g')
plt.show()
运行这段代码,我们会得到一张包含红色和绿色散点的图表。但此时我们会发现,虽然两组散点已经被区分出来,但新的问题又出现了:它们的交叉部分被覆盖时,我们很难看清这些点的分布情况。
这时,我们可以使用 alpha
参数来将散点设置为透明的。该参数确定了数据点颜色的透明度,取值范围为 0(完全透明)到 1(完全不透明)。我们可以为两组数据分别指定不同的透明度,这样当他们重叠时,能够更好地显示它们的分布情况。
import matplotlib.pyplot as plt
x1 = [1,2,3,4,5]
y1 = [3,2,4,1,5]
x2 = [3,4,5,6,7]
y2 = [9,8,7,5,6]
plt.scatter(x1, y1, color='r', alpha=0.5)
plt.scatter(x2, y2, color='g', alpha=0.3)
plt.show()
这样,我们就成功地将两组数据在同一个图表中绘制出来,并且通过设置不同的透明度,使得当它们重叠时,我们能够更好地观察它们的分布情况。
实例演示
接下来,我们来看一组实验数据。我们模拟了一个商品的销售情况,其中包括了四种不同种类的商品,以及在不同的日期和地点的销售量,数据存放在 sales.csv
文件中。
首先,我们通过 pandas 库读取数据:
import pandas as pd
df = pd.read_csv('sales.csv')
print(df.head())
得到以下数据:
date location product sales
0 1 1 1 100
1 1 1 2 200
2 1 1 3 50
3 1 1 4 30
4 1 2 1 80
接下来,我们将数据按照产品分类绘制散点图,并通过透明度调整展示交叉区域:
import matplotlib.pyplot as plt
colors = {1:'r', 2:'g', 3:'b', 4:'y'}
for product in range(1, 5):
x = df[df.product ==product]['date']
y = df[df.product == product]['location']
size = df[df.product == product]['sales'] / 10 # 调整点大小
color = colors[product]
alpha = 0.5 if product < 4 else 0.8 # 最后一组产品透明度较低
plt.scatter(x, y, s=size, color=color, alpha=alpha)
plt.xlabel('Date')
plt.ylabel('Location')
plt.title('Sales of different products')
plt.show()
运行这段代码,我们将得到一张如下图所示的散点图。
这个图显示了不同时间和地点中,各种商品的销售量。我们可以通过颜色和大小来区分不同商品的销售情况,同时透明度的设置也让我们能够更好地观察不同商品的交叉部分。
总结
本文介绍了如何在 matplotlib 中绘制透明化的散点图,通过调整透明度,我们可以更清晰地展示不同数据分组的交叉情况。同时,我们也举了一个实际的例子来介绍如何使用散点图展示不同种类商品的销售情况。这些技巧在数据分析和可视化中都是非常实用的。