Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib创建给定csv数据的曲面打印(x、y、z、颜色)-获取错误的颜色_Python_Csv_Matplotlib_Plot_Visualization - Fatal编程技术网

Python Matplotlib创建给定csv数据的曲面打印(x、y、z、颜色)-获取错误的颜色

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

如何读取四列数据以创建第四个变量着色的曲面图?在我的例子中,数据是使用四个嵌套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 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])
,我最初认为这是个问题,现在看来还不错。)