[英]Cycling through colors and defining a color map matplotlib
我正在遍歷文件路徑列表,我希望每個子列表都有一個單獨的數字。 在每個子列表中,我將文件打開為 dataframe、plot y1 和 y2(我想要相同的顏色),然后移動到該列表中的下一個文件/數據幀,我希望這兩行的顏色與第一行不同.
我的問題是如何定義要使用的顏色圖? 無論我選擇使用什么 cmap,以下內容似乎對我的地塊 output 沒有任何影響:
for x in configurations: # configurations is a list of list of directories
plt.rcParams['image.cmap'] = 'Accent' # Not working
prop_cycle = plt.rcParams['axes.prop_cycle']
colors = prop_cycle.by_key()['color']
for i, y in enumerate(x):
df = pd.read_fwf(y, header=None, comment='#', skiprows=53, skip_empty_rows=True)
df['epoch'] = pd.to_datetime(df['epoch'])
line1 = plt.plot(df['epoch'],df['y1'], color=colors[i])
line2 = plt.plot(df['epoch'],df['y2'], color=colors[i])
plt.show()
plt.rcParams['axes.prop_cycle']
對cycler
器 object 進行評估,它本身並不是特別有用,但您可以調用cycler
器來獲取itertools.cycle
object 可以傳遞給next
以獲得您擁有的字典在繪圖命令的 arguments 列表中解壓( **
運算符)
import matplotlib.pyplot as plt
import numpy as np
configurations = [ ['f0', 'f1', 'f2'], ['g0', 'g1']]
def get_df(fname):
# I have no Pandas, this fakes a data set
global n
n += 0.2
return dict(x=[0,1,2,3,4,5],
y1=[0,2+n,3+n,3+n,2+n,0],
y2=[3+n,2+n,0,-2-n,-3-n, -3-n])
n = 0
for conf in configurations:
prop_cycle = plt.rcParams['axes.prop_cycle']()
fig = plt.figure(constrained_layout=True)
ax = fig.add_subplot()
for fname in conf:
curr_dict = next(prop_cycle)
df = get_df(fname)
ax.plot('x', 'y1', '', data=df, label='y1 from '+fname, **curr_dict)
ax.plot('x', 'y2', '', data=df, label='y2 from '+fname, **curr_dict, linestyle='--')
ax.legend()
fig.savefig(fname[0]+'.png')
每次輸入新圖形時,上面都會重置循環,我希望這是合理的……否則將語句prop_cycle = plt.rcParams['axes.prop_cycle']()
放在循環之外。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.