Matplotlib 散点图
散点图是数据可视化中最常见的图表。Matplotlib是Python中最常用的绘图工具之一,也是制作散点图最常用的工具之一。通过Matplotlib中的散点图,我们可以用各种颜色、大小和标记类型来展示不同的数据。本文将重点介绍Matplotlib中的散点图,并使用第三变量作为颜色。
阅读更多:Matplotlib 教程
1. Matplotlib散点图基础知识
在Matplotlib中,最基本的散点图使用plt.scatter()
函数来创建。该函数将两个数组作为输入,分别代表横轴和纵轴上的数据。下面是一个简单的例子:
import matplotlib.pyplot as plt
import numpy as np
x = np.array([1, 2, 3, 4, 5])
y = np.array([3, 5, 2, 6, 1])
plt.scatter(x, y)
plt.show()
如上图所示,plt.scatter()
函数创建的散点图非常简单。我们可以使用多种参数来修改图表的外观和行为。一些常用的参数如下:
s
:散点的大小。c
:散点的颜色。marker
:散点的形状。alpha
:散点的透明度。
具体用法可以参考Matplotlib官方文档。
2. 使用第三变量作为颜色
除了上述参数,我们还可以使用第三个变量来指定散点图的颜色。假设有如下的数据集:
import numpy as np
x = np.array([0.3, 0.4, 0.5, 0.6, 0.7])
y = np.array([0.4, 0.5, 0.2, 0.7, 0.1])
z = np.array([1, 2, 1, 3, 4])
其中z
变量代表每个数据点所属的类别或组别。我们可以使用不同的颜色来表示不同的组别。具体的做法是将z
变量的取值映射到颜色,比如:
colors = ['r', 'g', 'b', 'c', 'm']
color_map = {1: 'r', 2: 'g', 3: 'b', 4: 'c'}
color = [color_map[int(i)] for i in z]
plt.scatter(x, y, c=color)
plt.show()
上图中,不同的组别分别用不同的颜色表示。映射的方法可以根据实际需求进行调整。比如,我们可以使用cm
模块中的颜色映射函数来将数字映射到颜色:
from matplotlib import cm
cmap = cm.get_cmap('viridis', max(z)-min(z)+1)
color = [cmap(i) for i in z-min(z)]
plt.scatter(x, y, c=color)
plt.show()
上图中,我们使用viridis
颜色图谱来将整数值映射到颜色。线性映射也可以进一步调整为对数映射、指数映射或其他自定义映射。
3. 示例:气泡图
气泡图(bubble chart)是一种特殊的散点图,用于显示三个变量之间的关系。除了横轴和纵轴上的数据之外,气泡图还用散点的大小表示第三个变量。在Matplotlib中,我们可以使用plt.scatter()
函数的s
参数来指定散点的大小。下面是一个简单的例子:
import numpy as np
import matplotlib.pyplot as plt
x = np.random.rand(50)
y = np.random.rand(50)
z = np.random.rand(50) * 100
plt.scatter(x, y, s=z)
plt.show()
如上图所示,散点的大小表示第三个变量,即z轴上的数据。我们可以使用不同的颜色来表示不同的数据点,这样就可以同时展示三个变量之间的关系。
4. 实战:绘制国家GDP和能源消耗的关系图
我们可以使用第三变量来展示两个不同变量之间的关系。下面我们将使用官方提供的国家GDP和能源消耗数据来绘制一个散点图,其中散点的颜色和大小分别表示国家的经济水平和能源消耗水平。
首先,导入数据:
import pandas as pd
url = 'https://raw.githubusercontent.com/plotly/datasets/master/data.csv'
df = pd.read_csv(url)
df.head()
接下来,我们从数据中选择需要展示的字段,并进行预处理:
x_col = 'gdpPercap'
y_col = 'energy_consumption'
z_col = 'continent'
# 只选择亚洲地区的数据
df = df[df['continent'] == 'Asia']
# 筛选非空数据
df = df[[x_col, y_col, z_col]].dropna()
x = df[x_col].values
y = df[y_col].values
z = df[z_col].values
最后,使用线性映射和颜色映射来展示数据:
import matplotlib.pyplot as plt
from matplotlib import cm
# 线性映射
x_norm = (x - x.min()) / (x.max() - x.min())
y_norm = (y - y.min()) / (y.max() - y.min())
# 颜色映射
cmap = cm.get_cmap('cool', len(set(z)))
color_map = {k: cmap(i) for i, k in enumerate(set(z))}
color = [color_map[k] for k in z]
# 画图
fig, ax = plt.subplots(figsize=(12, 8))
ax.scatter(x_norm, y_norm, s=100, c=color, alpha=0.8)
# 设置标签
ax.set_xlabel(x_col)
ax.set_ylabel(y_col)
# 设置图例
handles = [plt.plot([],[],color=color_map[i], marker="o",
ls="", alpha=0.8)[0] for i in color_map.keys()]
labels = list(color_map.keys())
legend = plt.legend(handles, labels, title=z_col, prop={'size': 10})
plt.setp(legend.get_title(),fontsize='large')
# 显示图表
plt.show()
如上图所示,我们使用线性映射和颜色映射展示了国家GDP和能源消耗之间的关系图,其中散点的颜色和大小分别表示国家所属的亚洲国家和该国的经济水平和能源消耗水平。这个例子展示了在实际中如何使用Matplotlib中的散点图,以及如何使用第三变量来表示数据更多的维度。
总结
散点图是数据可视化中最常用的图形之一,Matplotlib是Python中最常用的绘图工具之一。本文介绍了Matplotlib散点图的基础知识,并以实际应用为例,展示了如何将第三变量作为颜色来展示数据更多的维度。在实践中,我们可以根据实际需求选择不同的颜色映射方法,以及使用其他参数来调整散点图的大小、颜色、形状等外观。希望本文能够帮助读者学习和应用Matplotlib中的散点图,更好地展示和理解数据。