matplotlib正确的颜色/颜色条,用于具有多个不同颜色的多个表面的绘图

千焦耳

可以在一个pyplot图形中绘制多个曲面吗?这是我的尝试。ax.plot_surface命令似乎重置了图形,因为在生成的图形中我仅得到一个平面。我希望产生“堆叠”的平面,每个平面都具有独特的颜色,并使用颜色条显示每种颜色的数值。目前,我的颜色显示错误。

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):
         for c in range(0,7):
             dat.write(','.join([str(s) for s in [x,y,x+y+c,c/10.0,'\n']]))
dat.close()

fig = matplotlib.pyplot.gcf()
dat = np.genfromtxt('ex.csv', delimiter=',',skip_header=1)
X_dat = dat[:,0]
Y_dat = dat[:,1]
Z_dat = dat[:,2]
C_dat = dat[:,3]
ax1 = fig.add_subplot(111, projection='3d')
for color in np.unique(C_dat):
    X, Y, Z, C = np.array([]), np.array([]), np.array([]), np.array([])
    for i in range(len(X_dat)):
        if C_dat[i]==color:
            X = np.append(X,X_dat[i])
            Y = np.append(Y,Y_dat[i])
            Z = np.append(Z,Z_dat[i])
            C = np.append(C,C_dat[i])

    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')

    xig, yig = np.meshgrid(xi, yi)
    surf = ax1.plot_surface(xig, yig, zi,facecolors=cm.rainbow(ci), alpha = 0.7)

xi = np.linspace(X_dat.min(),X_dat.max(),100)
yi = np.linspace(Y_dat.min(),Y_dat.max(),100)
ci = griddata((X_dat, Y_dat), C_dat, (xi[None,:], yi[:,None]), method='cubic')
m = cm.ScalarMappable(cmap=cm.rainbow)
m.set_array(ci)
col = plt.colorbar(m)
plt.show()

在此处输入图片说明 (应该有一个红色的飞机)

Tmdavison

移动线

ax1 = fig.add_subplot(111, projection='3d')

for color in...循环之外通过在每次迭代中重新创建轴,可以隐藏先前创建的曲面


编辑(回答有关色图的第二个问题)

您需要规范化数据。当前,您的脸色在0到0.6的范围内,因此当您将最大值(0.6)馈给时cm.rainbow,您会得到绿色而不是红色(因为它期望的范围是0到1)。

这是一个经过修改的脚本,我认为它应该可以正常工作。我们使用Normalise来自matplotlib.colors一个vminvmax您确定C_dat的数据。然后,使用facecolors=cm.rainbow(norm(ci))设置表面的颜色。

然后,您还希望使用中的值设置ScalarMappable的数组C_dat,因此我们griddata在这里无需再次使用

import numpy as np
import pandas as pd
import matplotlib
import matplotlib.pyplot as plt
from matplotlib import cm
import matplotlib.colors as colors
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):
         for c in range(0,7):
             dat.write(','.join([str(s) for s in [x,y,x+y+c,c/10.0,'\n']]))
dat.close()

fig = matplotlib.pyplot.gcf()
dat = np.genfromtxt('ex.csv', delimiter=',',skip_header=1)
X_dat = dat[:,0]
Y_dat = dat[:,1]
Z_dat = dat[:,2]
C_dat = dat[:,3]

# Create a Normalize instance.
norm = colors.Normalize(vmin=C_dat.min(),vmax=C_dat.max())

ax1 = fig.add_subplot(111, projection='3d')
for color in np.unique(C_dat):
    X, Y, Z, C = np.array([]), np.array([]), np.array([]), np.array([])
    for i in range(len(X_dat)):
        if C_dat[i]==color:
            X = np.append(X,X_dat[i])
            Y = np.append(Y,Y_dat[i])
            Z = np.append(Z,Z_dat[i])
            C = np.append(C,C_dat[i])

    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')

    xig, yig = np.meshgrid(xi, yi)

    # Note the use of norm in the facecolors option
    surf = ax1.plot_surface(xig, yig, zi,facecolors=cm.rainbow(norm(ci)), alpha = 0.7)

m = cm.ScalarMappable(cmap=cm.rainbow)
m.set_array(np.unique(C_dat))

col = plt.colorbar(m)

plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ILNumerics PlotCube中多个表面的相同颜色条

来自分类Dev

具有多个颜色条的子图

来自分类Dev

内外颜色不同的表面绘图

来自分类Dev

自动为多个绘图提供不同的颜色?

来自分类Dev

ggplot中的多个线图,具有不同颜色的点和图例,用于线和点

来自分类Dev

如何绘制具有不同颜色的多个矢量?

来自分类Dev

页面上的多个<progress>元素具有不同的颜色

来自分类Dev

在hyperSpec对象中绘制具有不同颜色的多个光谱

来自分类Dev

如何绘制具有不同颜色的多个矢量?

来自分类Dev

熊猫图-多个颜色条

来自分类Dev

Python:具有多个变量的颜色输出

来自分类Dev

Matplotlib为什么颜色条y标签随着多个颜色条消失

来自分类Dev

Matplotlib颜色条多个plt.imshow图

来自分类Dev

绘图:使用一个颜色条进行多个CONTOUR绘图

来自分类Dev

每个标记的堆叠条具有不同的颜色?

来自分类Dev

每个进度条如何具有不同的颜色?

来自分类Dev

具有一种不同颜色条的Gnuplot框

来自分类Dev

用于PatchCollection的Matplotlib颜色条会覆盖颜色

来自分类Dev

在MATLAB中显示多个颜色图的颜色条

来自分类Dev

具有RGB颜色的MATLAB绘图

来自分类Dev

Python散点图多个颜色条问题

来自分类Dev

matplotlib调整颜色条

来自分类Dev

定位颜色条-Matplotlib

来自分类Dev

定位颜色条-Matplotlib

来自分类Dev

OpenCV:如何将多个具有不同颜色的半透明多边形混合?

来自分类Dev

突出显示具有不同颜色的多个搜索词的搜索(hls)匹配项

来自分类Dev

如何在Android 4.x上同时显示多个具有不同颜色的ProgressBar?

来自分类Dev

在Python matplotlib中,为什么不添加颜色栏来更改表面的颜色?

来自分类Dev

具有不同标记和颜色的matplotlib散点图

Related 相关文章

  1. 1

    ILNumerics PlotCube中多个表面的相同颜色条

  2. 2

    具有多个颜色条的子图

  3. 3

    内外颜色不同的表面绘图

  4. 4

    自动为多个绘图提供不同的颜色?

  5. 5

    ggplot中的多个线图,具有不同颜色的点和图例,用于线和点

  6. 6

    如何绘制具有不同颜色的多个矢量?

  7. 7

    页面上的多个<progress>元素具有不同的颜色

  8. 8

    在hyperSpec对象中绘制具有不同颜色的多个光谱

  9. 9

    如何绘制具有不同颜色的多个矢量?

  10. 10

    熊猫图-多个颜色条

  11. 11

    Python:具有多个变量的颜色输出

  12. 12

    Matplotlib为什么颜色条y标签随着多个颜色条消失

  13. 13

    Matplotlib颜色条多个plt.imshow图

  14. 14

    绘图:使用一个颜色条进行多个CONTOUR绘图

  15. 15

    每个标记的堆叠条具有不同的颜色?

  16. 16

    每个进度条如何具有不同的颜色?

  17. 17

    具有一种不同颜色条的Gnuplot框

  18. 18

    用于PatchCollection的Matplotlib颜色条会覆盖颜色

  19. 19

    在MATLAB中显示多个颜色图的颜色条

  20. 20

    具有RGB颜色的MATLAB绘图

  21. 21

    Python散点图多个颜色条问题

  22. 22

    matplotlib调整颜色条

  23. 23

    定位颜色条-Matplotlib

  24. 24

    定位颜色条-Matplotlib

  25. 25

    OpenCV:如何将多个具有不同颜色的半透明多边形混合?

  26. 26

    突出显示具有不同颜色的多个搜索词的搜索(hls)匹配项

  27. 27

    如何在Android 4.x上同时显示多个具有不同颜色的ProgressBar?

  28. 28

    在Python matplotlib中,为什么不添加颜色栏来更改表面的颜色?

  29. 29

    具有不同标记和颜色的matplotlib散点图

热门标签

归档