我的数据是:
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
答案 0 :(得分:1)
您可以使用色彩图访问不同的颜色。模块matplotlib.cm提供了色彩映射,或者您可以c reate your own。 This 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()
或者,您可以直接从色彩映射中访问RGBA值:
plt.vlines(timeDate,Y,V,colors=cmap(np.arange(256)))