Python Matplotlib创建给定csv数据的曲面打印(x、y、z、颜色)-获取错误的颜色
如何读取四列数据以创建第四个变量着色的曲面图?在我的例子中,数据是使用四个嵌套for循环生成的,因此最右边的列更改频率最高,而最左边的列更改频率最低 这是我到目前为止所做的尝试。它正在创建一个纯色图形,但颜色是错误的Python Matplotlib创建给定csv数据的曲面打印(x、y、z、颜色)-获取错误的颜色,python,csv,matplotlib,plot,visualization,Python,Csv,Matplotlib,Plot,Visualization,如何读取四列数据以创建第四个变量着色的曲面图?在我的例子中,数据是使用四个嵌套for循环生成的,因此最右边的列更改频率最高,而最左边的列更改频率最低 这是我到目前为止所做的尝试。它正在创建一个纯色图形,但颜色是错误的 import numpy as np import pandas as pd import matplotlib import matplotlib.pyplot as plt from matplotlib import cm from mpl_toolkits.mplot3d
import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
import pylab
from scipy.interpolate import griddata
dat = open('ex.csv', 'w')
dat.write('x,y,z,c\n')
for x in range(20):
for y in range(20):
dat.write(','.join([str(s) for s in [x,y,x+y,x+y,'\n']]))
dat.close()
fig = matplotlib.pyplot.gcf()
subdat = np.genfromtxt('ex.csv', delimiter=',',skiprows=1)
X = subdat[:,0]
Y = subdat[:,1]
Z = subdat[:,2]
C = subdat[:,3]
xi = np.linspace(X.min(),X.max(),100)
yi = np.linspace(Y.min(),Y.max(),100)
zi = griddata((X, Y), Z, (xi[None,:], yi[:,None]), method='cubic')
ci = griddata((X, Y), C, (xi[None,:], yi[:,None]), method='cubic')
ax1 = fig.add_subplot(111, projection='3d')
xig, yig = np.meshgrid(xi, yi)
surf = ax1.plot_surface(xig, yig, zi,facecolors=cm.rainbow(ci))
m = cm.ScalarMappable(cmap=cm.rainbow)
m.set_array(ci)
col = plt.colorbar(m)
plt.show()
(着色错误,应与具有连续渐变的高程值相同)这里的问题是,
面颜色没有按照预期标准化。尝试以下方法,明确地进行规范化:
norm = matplotlib.colors.Normalize()
surf = ax1.plot_surface(xig, yig, zi, facecolors=cm.rainbow(norm(ci)))
您确定x、y、z点形成一个曲面吗?你会说“非结构化数据”,但这些数据看起来是高度结构化的。你指的是什么?我的意思是它不是按网格排列的。我会把它拿出来的,我知道这很混乱。请确保重塑后的新尺寸与旧数据兼容。在本例中,dat['var1']
的大小为11,您正试图将其重塑为3X5。可能您需要为“var1”和“var2”的某些组合填写缺少的值。@hashmuke抱歉,我对我的问题进行了大量编辑,您的评论似乎不再相关。谢谢你的评论,它帮助我发展了我的问题。谢谢!为什么j在这里:grid\ux,grid\uy=np.mgrid[0:1:100j,0:1:100j]
?有没有一种方法可以对任何X,Y数据执行此操作?看起来您的解决方案仅限于我的示例范围。再次感谢您的回答。我不检查它,因为我正在寻找一个解决一般问题的方法。另外,你的颜色栏在某些情况下关闭了20倍reason@kilojoules:我已经更新了我的答案。在我的更新中,除了显示的行之外,代码中的所有内容都与代码中的内容相同。(特别是,你的术语(xi[None,:],yi[:,None])
,我最初认为这是个问题,现在看来还不错。)