numpy - ValueError:轮廓级别必须增加 - 如何绘制 3 个特征数据
问题描述
import numpy as np
from matplotlib import pyplot as plt
data = np.random.normal(0,1,[100,3])
x = data[:,0]
y = data[:,1]
z = data[:,2]
plt.contour([x,y],z)
当我使用虚拟数据运行此代码时,我得到:
ValueError: Contour levels must be increasing
您知道这意味着什么以及我该如何解决吗?
解决方案
plt.contour
对其输入有点特殊,z 值必须在矩形 2D 网格上的值上,例如:
import matplotlib.pyplot as plt
import numpy as np
x = np.expand_dims(np.arange(1,11,1), axis=1)
y = np.expand_dims(np.arange(2,21,2), axis=0)
z = y * x
print(x.shape)
print(y.shape)
print(z.shape)
plt.figure()
plt.contour(z)
plt.show()
plt.contour
您还可以使用以下方法提供 x 和 y 值np.meshgrid
:
XX,YY = np.meshgrid(x,y)
plt.figure()
plt.contour(XX, YY, z)
plt.show()
如果您的 z 值具有不规则的 x 和 y 值,您可以使用plt.tricontour
,请参见以下示例:
from matplotlib.tri import Triangulation
data = np.random.normal(0,1,[100,3])
x = data[:,0]
y = data[:,1]
#z = data[:,2]
z = x * y
tri = Triangulation(x,y)
plt.figure()
plt.tricontour(tri, z, )
plt.scatter(x,y, c=z)
plt.show()
编辑:从 JohanC 的评论中我了解到,这可以在不导入matplotlib.tri
的情况下简化:
plt.figure()
plt.tricontour(x,y,z)
plt.scatter(x,y, c=z)
plt.show()
推荐阅读
- c++ - 访问变体与访问单个元素的性能
- linux - 许多打开的文件导致不间断的睡眠“D 状态”
- mysql - 加入两个查询
- javascript - Highchart react - 数据标签出现在图表动画之前
- r - R:如何结合 Word2Vec 嵌入和 LSTM 网络
- python - Python Selenium Geckodriver 被检测为 Bot
- reactjs - React history.push location.state 在刷新时未定义
- github - Github Actions 首先部署在 Kubernetes 上
- sql - 准确的日期差异
- mysql - 在最后显示整行