用第三个变量将点组分开

时间:2014-05-27 18:59:32

标签: python matplotlib

我有几个单独的x和y变量列表,例如:

x1=[1,2,3], y1=[1,2,3],
x2=[1,2,3], y2=[4,5,6]
x3=[1,2,3], y3=[7,8,9]

我还有一个单独的第三个变量,一个对应于每组数据的值:例如var=[10,20,30]

我希望绘制单独的点组,并根据第三个变量为每个着色,从冷到热,具体取决于var中的值。即x1,y1的整个数据集将是相同的颜色,并且将根据值10。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:1)

我认为你在寻找以下内容,因为你有3d积分。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt

x1=[1,2,3]; y1=[3,2,3]
x2=[-1,-2,-3]; y2=[4,5,6]
x3=[0,0,0]; y3=[7,8,9]

zS = [10, 20, 100]

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# Define the color map
cm = plt.cm.get_cmap('RdYlBu')

# Iterate through points and plot
for x, y, z in zip([x1, x2, x3], [y1, y2, y3], zS):
    ax.scatter(x[0], x[1], x[2], s=50,
               c=z, cmap=cm, vmin=0, vmax=100)

    ax.scatter(y[0], y[1], y[2], s=50, 
               c=z, cmap=cm, vmin=0, vmax=100)

plt.show()

enter image description here

这是一种相当漫长的方式,它可以改进,但我希望尽可能贴近您提供的数据。

如果您最终以这种方式绘制大量点,我建议将它们全部作为数组(包含大小)传递,而不是在每个点上循环。这会加快它的速度,但我认为最初更容易消化。

答案 1 :(得分:0)

也许你想要这样的东西:

for i in range(3, 10, 3):
    color = (((i - 1) / 9.), 0.0, 1-((i - 1) / 9.)) #Generate a color for the points, blue to red.
    j = list(range(1, 3+1)) # Generate your data set.
    k = list(range(i-2, i+1))
    plt.plot(j,k, 'ro', c=color) # Plot each one
plt.axis([-1,4,-1,10])
plt.show() #Finally show it.

这会产生:

enter image description here