python - Python matplotlib - 将分类背景与散点图结合起来
问题描述
我试图在 Python 中找出一个正确的库来创建一个看起来像这样的复杂图:
情节背景根据 X 和 Y 的条件分为 3 个区域(黄色、红色、绿色)。例如:
- 对于绿色区域: (
X<=1
和Y<=1
) 或 (X<0.5
) - 黄色区域: (
0.5<X<1
和Y>1
) OR (1<X<1.5
和1<Y<3
) OR (1.5<X<2
和Y<2
) 同样适用于红色区域......
在我的申请中,这些条件保持不变。我在 csv 文件中有坐标,并且知道如何绘制散点图。但是由于背景颜色代码,我被卡住了。
是否有一个 Python 库可用于绘制散点图以及后面的这些网格颜色。我检查了许多网站和问题,但不幸的是没有发现任何有用/相关的内容。
任何建议/帮助表示赞赏。
解决方案
您可以将 matplotlibimshow()
与 2D 数组一起使用。二维数组的坐标可以使用np.meshgrid()
. 这些坐标将是每个网格单元的左下顶点。它们可以寻址到二维数组中,例如使用[((X < 1) & (Y < 1)) | (X < 0.5)]
. 0
用,1
和2
在适当的位置填充 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()
推荐阅读
- r - R中MCMCglmm模型的Gelman-Rubin统计
- python - 如何使用正则表达式在字符串中搜索特定模式
- linux - pscp: 波浪号 '~' 未被识别为主目录,如何解决?
- windows - 在批处理文件中循环文件以将它们添加为 SSL 证书
- c# - c# Windows 服务在使用 installutil.exe 发布时不起作用
- node.js - 如何通过 docker 设置我的 nodejs 后端,以便使用正确的表构建数据库?
- python - 当使用@client.event discord 时,当输入某些关键字时,bot 不会返回消息
- popmotion - Popmotion 立即结束补间并跳转到补间的末尾
- reactjs - 使地图的边界适合 React-Leaflet 中 FeatureGroup 的内容
- android - 如何检查是否启用了“多用户”