在matplotlib中绘制不同颜色的“矢量”

时间:2014-08-18 13:14:57

标签: python matplotlib plot

我的数据是:

import matplotlib.pyplot as plt
from datetime import *
import matplotlib

my_vectors =[['120819152800063',10,189, 8],
 ['120819152800063', 10,184, 8],
 ['120819152800063', 0,190, 43],
 ['120819152800067', 8,67, 10],
 ['120819152800067', 8,45, 10],
 ['120819152800073', 10,31, 8],
 ['120819152800073', 10,79, 8],
 ['120819152800073', 7,102, 25],
 ['120819152800075', 125,0, 13]]

我试图绘制矢量来表示数据,但我作弊(我代表一条线代表矢量的主体,2点代表开始和结束),我只是想给身体着色每个'向量'。

timeString = zip(*my_vectors)[0]
timeDatetime=[datetime.strptime(aTime, '%y%m%d%H%M%S%f') for aTime in timeString]
timeDate=matplotlib.dates.date2num(timeDatetime)
# Represent the data time
X = tuple([int(x) for x in timeString])
# Represent the data sender
Y = zip(*my_vectors)[1]
# represent the data type 
U = zip(*my_vectors)[2]
# represent the data receiver
V = zip(*my_vectors)[3]

# the 'body' of the vectors
plt.vlines(timeDate,Y,V,colors='r')
# the beginning of the vectors
plt.plot_date(timeDate,Y,'b.',xdate=True)
# the end of the vectors
plt.plot_date(timeDate,V,'y.')
plt.show()

为了更好地读取我的数据,我需要更改每种数据类型的颜色,但我不知道我有多少数据类型。 我怎么能这样做?

我已经阅读了这个问题,但我真的不明白答案:

Setting different color for each series in scatter plot on matplotlib

1 个答案:

答案 0 :(得分:1)

您可以使用色彩图访问不同的颜色。模块matplotlib.cm提供了色彩映射,或者您可以c reate your ownThis demo显示可用的色彩映射及其名称。色彩图包含256种不同的颜色。您可以迭代数据并为每个向量指定不同的颜色,就像您链接到的示例中所做的那样。如果你有超过256个数据点,你需要重复颜色或使用更大的色彩图,但无论如何你可能会达到光谱分辨率的极限。

以下是基于您的问题的示例。

from matplotlib import pyplot as plt
import matplotlib.cm as cm
import numpy as np

# Some fake data
timeDate = np.arange(256)
Y = timeDate * 1.1 + 2
V = timeDate * 3 + 1

# Select the color map named rainbow
cmap = cm.get_cmap(name='rainbow')

# Plot each vector with a different color from the colormap. 
for ind, (t, y, v) in enumerate(zip(timeDate, Y, V)):
    plt.vlines(t,y,v ,color = cmap(ind))

plt.show()

plot using a color map on vlines

或者,您可以直接从色彩映射中访问RGBA值:

plt.vlines(timeDate,Y,V,colors=cmap(np.arange(256)))