今天的任务是给定一个DataFrame(名称为data,其列分别为x,y,z),如何根据这个dataframe来绘制等高线图。
这个问题研究了两天,国内网站上给出的绝大多数解决方案都是这样的:
import numpy as np
import matplotlib.pyplot as plt
stepx = 0.01; stepy = 0.01
x = np.arange(-10,10,stepx); y = np.arange(-10,10,stepy)
X,Y = np.meshgrid(x,y)
def f(X,Y):
return(np.sqrt(X**2+Y**2))
Z = f(X, Y)
fig, ax = plt.subplots(figsize=(8,8),dpi=100)
ax.contourf(X, Y, Z)
plt.show()
但是对于我自己写的一个很复杂的函数而言,是没办法直接生成Z的,所以只能把x,y,z保存到一个DataFrame中,当然我们可以用其他的方式来解决这个问题,但是作为一个Pythonic而言,总还是有些缺陷的,所幸的是终于在一个国外的网站,找到了想要的答案,其核心代码如下:
import numpy as np
import matplotlib.pyplot as plt
Z = data.pivot_table(index='y', columns='x', values='z').values
X_unique = np.sort(data.x.unique())
Y_unique = np.sort(data.y.unique())
X, Y = np.meshgrid(X_unique, Y_unique)
plt.contour(X, Y, Z)
plt.show()
网友评论