通过传递lis索引词典

2024-05-28 23:33:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图用字典中存储的颜色来绘制数据帧。 此代码适用于:

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

如何从字典中获取多个值?你知道吗


Tags: importdf字典plotasrangepltlist
2条回答

如果您使用的是matplotlib>;1.5,则使用set_color_cycle将显示折旧消息:

c:\Python27\lib\site-packages\matplotlib\cbook\deprecation.py:106:
MatplotlibDeprecationWarning: The set_color_cycle attribute was deprecated in version 1.5. Use set_prop_cycle instead.

因此,使用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()

它给出:

enter image description here

好吧,你可以用更少的字来理解:

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()

相关问题 更多 >

    热门问题