[英]How to change colors on multilines plotting using matplotlib and python?
我正在使用字典用python和matplotlib繪制線條我不知道為什么我的線條顏色沒有改變
from datetime import datetime
import matplotlib.pyplot as plt
dico = {'A01': [(u'11/10/12-08:00:01', 2.0), (u'11/10/12-08:10:00', 10.0), \
(u'11/10/12-08:20:01', 5.0), (u'11/10/12-08:30:01', 15.0), \
(u'11/10/12-08:40:00', 7.0), (u'11/10/12-08:50:01', 45.0)],
'A02': [(u'11/10/12-08:00:01', 10.0), (u'11/10/12-08:10:00', 12.0), \
(u'11/10/12-08:20:01', 15.0), (u'11/10/12-08:30:01', 10.0), \
(u'11/10/12-08:40:00', 17.0), (u'11/10/12-08:50:01', 14.0)]}
x = []
y = []
lstPlot = []
plt.gca().set_color_cycle(["b", "g", "r", "c", "m", "y", "k"])
for key, values in dico.iteritems():
for i in sorted(values):
# date sting to date obj
dateObj = datetime.strptime(i[0], "%d/%m/%y-%H:%M:%S")
line = dateObj, i[1]
lstPlot.append(line)
for i in sorted(lstPlot):
x.append(i[0])
y.append(i[1])
plt.plot(x, y, label=key)
# plotting
plt.legend(loc='upper right')
plt.xlabel('Dates')
plt.ylabel("titre")
plt.title("Modbus")
plt.show()
請注意,圖例中有不同的顏色,但情節中沒有。
它們正在發生變化,但是您正在彼此過度繪圖。 這些線
x = []
y = []
lstPlot = []
必須在循環中 。 否則, lstPlot
將會增長。 例如,在循環內添加print lstPlot
可以得到:
[(datetime.datetime(2012, 10, 11, 8, 0, 1), 10.0), (datetime.datetime(2012, 10, 11, 8, 10), 12.0), (datetime.datetime(2012, 10, 11, 8, 20, 1), 15.0), (datetime.datetime(2012, 10, 11, 8, 30, 1), 10.0), (datetime.datetime(2012, 10, 11, 8, 40), 17.0), (datetime.datetime(2012, 10, 11, 8, 50, 1), 14.0)]
[(datetime.datetime(2012, 10, 11, 8, 0, 1), 10.0), (datetime.datetime(2012, 10, 11, 8, 10), 12.0), (datetime.datetime(2012, 10, 11, 8, 20, 1), 15.0), (datetime.datetime(2012, 10, 11, 8, 30, 1), 10.0), (datetime.datetime(2012, 10, 11, 8, 40), 17.0), (datetime.datetime(2012, 10, 11, 8, 50, 1), 14.0), (datetime.datetime(2012, 10, 11, 8, 0, 1), 2.0), (datetime.datetime(2012, 10, 11, 8, 10), 10.0), (datetime.datetime(2012, 10, 11, 8, 20, 1), 5.0), (datetime.datetime(2012, 10, 11, 8, 30, 1), 15.0), (datetime.datetime(2012, 10, 11, 8, 40), 7.0), (datetime.datetime(2012, 10, 11, 8, 50, 1), 45.0)]
(您可能需要滾動查看第二個列表比第一個列表長很多,但是您應該注意,第一個值在兩個列表中都相同。)
因此,您可以清除其中的列表,也可以稍微簡化一下:
for key, values in dico.iteritems():
points = [(datetime.strptime(i[0], "%d/%m/%y-%H:%M:%S"), i[1]) for i in values]
points.sort()
x, y = zip(*points)
plt.plot(x, y, label=key)
該代碼,加上@bmu的建議
plt.gcf().autofmt_xdate()
自動使x軸看起來不錯,產生
[或者,您可能希望使用get_xticklabels()
和set_rotation
方法set_rotation
進行更好的控制。
嘗試:
colors = ["b", "g", "r", "c", "m", "y", "k"]
for (key, values), c in zip(dico.iteritems(), colors):
...
plt.plot(x, y, c, label=key)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.