这是我的数据和我想要制作的图表:
from numpy import array
from os.path import expanduser
import matplotlib.pyplot as plt
sns.set(style="darkgrid")
data = [array([8, 4, 9, 6, 2]), array([5, 4, 4, 1, 2]), array([4, 3, 1, 5, 6]), array([8, 3, 5, 6, 4])]
for d in data:
plt.plot(d)
# plt.savefig(expanduser("~/Documents/rural_juror.pdf"))
由于我想在同一个seaborn facetgrid
中绘制其中的几个,我不能使用循环,但必须在一行上完成,如下所示:
plt.plot(*data)
# produces same result as
# plt.plot(data[0], data[1], data[2], data[3])
然而,这不起作用,但产生如下图形:
我猜这与绘制data, looks, data, looks...
类型的参数有关,但我该如何解决这个问题?
答案 0 :(得分:5)
是的,如果您想使用单行播放,则需要提供x
和y
值。你可以这样做:
import numpy as np
x = np.arange(5)
data = [x, array([8, 4, 9, 6, 2]),
x, array([5, 4, 4, 1, 2]),
x, array([4, 3, 1, 5, 6]),
x, array([8, 3, 5, 6, 4])]
plt.plot(*data)
答案 1 :(得分:1)
对于单行循环语句,您可以使用如下列表解析:
lines = [plt.plot(d) for d in data]
lines
将是matplotlib.lines.Line2D
个对象的列表。
答案 2 :(得分:0)
我无法在不安装seaborn的情况下对此进行测试,但看起来FacetGrid使用DataFrame作为数据输入。 http://stanford.edu/~mwaskom/software/seaborn/generated/seaborn.FacetGrid.html
所以这应该有用
import pandas as pd
data = [array([8, 4, 9, 6, 2]), array([5, 4, 4, 1, 2]), array([4, 3, 1, 5, 6]), array([8, 3, 5, 6, 4])]
df = pd.DataFrame(data)
df.transpose() #not sure if you need it transposed
g = sns.FacetGrid(df)