首页 > 解决方案 > Python matplotlib - 将分类背景与散点图结合起来

问题描述

我试图在 Python 中找出一个正确的库来创建一个看起来像这样的复杂图:

待创建的地块

情节背景根据 X 和 Y 的条件分为 3 个区域(黄色、红色、绿色)。例如:

在我的申请中,这些条件保持不变。我在 csv 文件中有坐标,并且知道如何绘制散点图。但是由于背景颜色代码,我被卡住了。

是否有一个 Python 库可用于绘制散点图以及后面的这些网格颜色。我检查了许多网站和问题,但不幸的是没有发现任何有用/相关的内容。

任何建议/帮助表示赞赏。

标签: pythonmatplotlibplotdata-visualization

解决方案


您可以将 matplotlibimshow()与 2D 数组一起使用。二维数组的坐标可以使用np.meshgrid(). 这些坐标将是每个网格单元的左下顶点。它们可以寻址到二维数组中,例如使用[((X < 1) & (Y < 1)) | (X < 0.5)]. 0用,12在适当的位置填充 2D 数组可以创建背景。

Matplotlibscatter()将放置散点。

import matplotlib.pyplot as plt
from matplotlib.colors import ListedColormap
from matplotlib.ticker import MultipleLocator
import numpy as np

xvals = np.random.uniform(0, 3, 50)
yvals = np.random.uniform(0, 4.2, 50)
X1d = np.arange(0, 3.0001, 0.25)
Y1d = np.arange(0, 4.2001, 0.20)
X, Y = np.meshgrid(X1d, Y1d)
backgr = np.full_like(X, 2)
backgr[((X < 1.5) & (Y < 3)) | ((X < 2) & (Y < 2)) | (X < 1)] = 1
backgr[((X < 1) & (Y < 1)) | (X < 0.5)] = 0
fig, ax = plt.subplots()
ax.scatter(xvals, yvals, color='black')
cmap = ListedColormap(['lime', 'gold', 'crimson'])
ax.imshow(backgr[:-1, :-1], cmap=cmap, alpha=0.2, extent=[0, X1d[-1], 0, Y1d[-1]], origin='lower', aspect='auto')
ax.set_xticks(X1d, minor=True)
ax.set_yticks(Y1d, minor=True)
ax.xaxis.set_major_locator(MultipleLocator(1))
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.grid(True, which='both', lw=1, ls=':', color='black')
plt.show()

示例图


推荐阅读