簡體   English   中英

如何使用matplotlib和python更改多線圖上的顏色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM