意大利面条情节没有for循环?

时间:2019-08-25 05:01:12

标签: python matplotlib

我想使用matplotlib pyplot制作意大利面条图(一个窗口中的许多行)。根据我的数据,不同的线条需要使用不同的颜色。但是,我不想为每行使用for循环,因为我需要它快速运行。我正在使用matplotlib事件处理,并根据鼠标拖动重新绘制200行以上的代码; for循环为此花费了太长时间。

虽然对此没有任何文档,但我发现如果使用plt.plot并传递x的数组和y的矩阵,则会打印出多行。而且超级快。但是,所有颜色必须相同。传递颜色数组会导致错误。

_ = plt.plot([0,1,2,3,4], np.matrix.transpose(np.asarray([[0,0,0,0,0],[1,1,1,1,1],[2,2,2,2,2]])), color='blue', linewidth=1, alpha=0.4) 

此代码在一个绘图中产生3条水平线,并且比使用plot命令3次要快。很棒,但是我想要不同的颜色。如果我愿意

_ = plt.plot([0,1,2,3,4], np.matrix.transpose(np.asarray([[0,0,0,0,0],[1,1,1,1,1],[2,2,2,2,2]])), color=['blue', 'red, 'green'], linewidth=1, alpha=0.4) 

我得到一个错误无效的RGBA参数:array(['blue','red','red'],dtype ='

1 个答案:

答案 0 :(得分:5)

删除color参数,它将自动发生

a = [0,0,0,0,0]
b = [1,1,1,1,1]
c = [2,2,2,2,2]

plt.plot([0,1,2,3,4], np.matrix.transpose(np.asarray([a, b, c])), linewidth=1, alpha=0.4)

enter image description here

如果您只想要彩色水平线:

plt.hlines([0, 1, 2], 0, 4, ['r', 'b', 'g'])

enter image description here

使用seaborn:

import seaborn as sns
import pandas as pd

ex = pd.DataFrame({'a': [0, 0, 0],
                   'b': [1, 1, 1],
                   'c': [2, 2, 2]})

# either palette works
palette=["#9b59b6", "#3498db", "#95a5a6"]
# palette=['blue', 'red', 'green']

sns.lineplot(data=ex, palette=palette, dashes=False)
plt.show()

enter image description here

其他选项: