如何使用matplot3d更改三维点的形状/颜色

2024-06-16 15:01:01 发布

您现在位置:Python中文网/ 问答频道 /正文

Python和MatPlot3D新手。我想用不同的颜色和坐标来显示。数据看起来像这样。在

col1 col2   col3 col4 col5
276  147    -6   K  dia
274  145    -8   A  cir
270  141    -12  B  dia
267  138    -15  K  cir
266  137    -16  K  cir
261  132    -21  B  bu
251  122    -31  C  cir

现在我想更改基于col4的形状和基于col5的形状的颜色。我现在有这段代码,它从文件中读取数据点,并且只绘制这些点。在

^{pr2}$

如何根据col4和col5的值轻松指定形状和颜色?在


Tags: 数据代码颜色读取数据col2col3col1形状
1条回答
网友
1楼 · 发布于 2024-06-16 15:01:01

首先要做的是导入数据时不要将这些列转换为“nan”,然后需要将列值转换为mpl可以理解的值。在

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
from matplotlib.mlab import griddata
import numpy as np
import csv

color_map = {'A':'r', 'B':'b', 'K':'k', 'C':'c'}
shape_map = {'dia':'^', 'cir':'o', 'bu':'.'}

with open('/tmp/dist.txt','r') as in_file:
    reader = csv.DictReader(in_file, delimiter=' ', skipinitialspace=True)
    data = []
    for r in reader:
        data.append([float(r['col1']),
                     float(r['col2']),
                     float(r['col3']),
                     color_map[r['col4']],
                     shape_map[r['col5']]])

要获得颜色很容易,scatter将为每标记着色使用一个iterable颜色:

^{pr2}$

获得形状有点困难,因为scatter只需要一个marker来表示所有点,所以如果您想使用多个scatter调用:

import collections

by_shape = collections.defaultdict(list)
for d in data:
    by_shape[d[4]].append(d[:4])

for key, val in by_shape.items():
    X, Y, Z, col = zip(*val)
    ax.scatter(X, Y, Z, c=col, marker=key)

相关问题 更多 >