我正在尝试使用存储在字典中的颜色来绘制数据框。 此代码有效:
import matplotlib.pyplot as plt
import pandas as pd
df = pd.DataFrame(np.random.randn(100, 4), index=range(100), columns=list('ABCD'))
df = df + [-2, 0, 2, 4]
x = list(range(100, 1100, 10))
clrhex = {'abcd':'#FFA500', 'efgh':'#FF0000','ijkl':'#000000','mnop':'#6495ED'}
plt.plot(x, df, color=[clrhex['abcd'], clrhex['efgh'], clrhex['ijkl'], clrhex['mnop']])
plt.show()
但是我想通过使用列表索引字典来缩短它。这样:
plt.plot(x, df, color=clrhex['abcd', 'efgh', 'ijkl', 'mnop'])
给出以下错误消息:
Invalid RGBA argument
如何从字典中获取多个值?
答案 0 :(得分:2)
如果您正在使用matplotlib> 1.5,使用set_color_cycle
会显示折旧消息:
C:\ Python27 \ lib中\站点包\ matplotlib \ cbook \ deprecation.py:106:
MatplotlibDeprecationWarning:set_color_cycle属性是 在1.5版中弃用。请改用set_prop_cycle。
因此,使用set_prop_cycle
即可:
df = pd.DataFrame(np.random.randn(100, 4), index=range(100), columns=list('ABCD'))
df = df + [-2, 0, 2, 4]
x = list(range(100, 1100, 10))
clrhex = {'abcd':'#FFA500', 'efgh':'#FF0000','ijkl':'#000000','mnop':'#6495ED'}
plt.gca().set_prop_cycle('color', [clrhex[i] for i in ['abcd', 'efgh', 'ijkl', 'mnop']])
plt.plot(x, df)
plt.show()
使用set_prop_cycle
的优点是,您可以将其与其他内容(不仅仅是线条样式或线宽)一起使用。下面是一些修改过的代码,展示了如何更改颜色和线宽(如果您想要的话),并使用面向对象的API:
from cycler import cycler
df = pd.DataFrame(np.random.randn(100, 4), index=range(100), columns=list('ABCD'))
df = df + [-2, 0, 2, 4]
x = list(range(100, 1100, 10))
clrhex = {'abcd':'#FFA500', 'efgh':'#FF0000','ijkl':'#000000','mnop':'#6495ED'}
fig, ax = plt.subplots()
ax.set_prop_cycle(cycler('color', [clrhex[i] for i in ['abcd', 'efgh', 'ijkl', 'mnop']]) +
cycler('lw', [1,2,3,4]))
ax.plot(x, df)
plt.show()
给出了:
答案 1 :(得分:1)
嗯,你可以用更少的字符来理解:
color=[clrhex[i] for i in ['abcd', 'efgh', 'ijkl', 'mnop']]
修改强>
你的代码对我不起作用所以我用过这个:
plt.plot(x, df)
plt.gca().set_color_cycle([clrhex[i] for i in ['abcd', 'efgh', 'ijkl', 'mnop']])
plt.show()