pd.MultiIndex.from_product
创建一个多索引来实现,但我无法弄清楚。您可以忽略图片中的值。它可以是随机值,不是问题。我将设法弄清楚以后输入的值。
答案 0 :(得分:3)
这是创建MultiIndex.from_product
的方式。为了进行绘图,您需要稍微重组数据-我在这里使用stack
和reset_index
。我建议使用seaborn.Facetgrid
,以便于配置散点图。
import matplotlib.pyplot as plt
import seaborn as sns
# Create MultiIndex from_product
columns = pd.MultiIndex.from_product([['A', 'B', 'C'], ['x', 'y']])
np.random.seed(0)
df = pd.DataFrame(np.random.randn(10, 6), columns=columns)
print(df)
A B C
x y x y x y
0 1.764052 0.400157 0.978738 2.240893 1.867558 -0.977278
1 0.950088 -0.151357 -0.103219 0.410599 0.144044 1.454274
2 0.761038 0.121675 0.443863 0.333674 1.494079 -0.205158
3 0.313068 -0.854096 -2.552990 0.653619 0.864436 -0.742165
4 2.269755 -1.454366 0.045759 -0.187184 1.532779 1.469359
5 0.154947 0.378163 -0.887786 -1.980796 -0.347912 0.156349
6 1.230291 1.202380 -0.387327 -0.302303 -1.048553 -1.420018
7 -1.706270 1.950775 -0.509652 -0.438074 -1.252795 0.777490
8 -1.613898 -0.212740 -0.895467 0.386902 -0.510805 -1.180632
9 -0.028182 0.428332 0.066517 0.302472 -0.634322 -0.362741
# Scatter subplots
g = sns.FacetGrid(df.stack(level=0).reset_index(), row='level_1')
g.map(plt.scatter, 'x', 'y')
或者,如果您需要一个区分“ A”,“ B”和“ C”的图,则可以尝试:
sns.scatterplot(data=df.stack(level=0).reset_index(), x='x', y='y', hue='level_1')
答案 1 :(得分:1)
您可能要创建一个包含三列的数据框:x,y和t(“ A”,“ B”或“ C”):
import pandas as pd
df = pd.DataFrame({"x": [ 1, 1, 1, 2, 2, 2, 3, 3, 3 ],
"y": [ 1, 2, 3, 2, 4, 6, 3, 6, 9 ],
"t": ["A", "B", "C", "A", "B", "C", "A", "B", "C"]})
绘制三条不同的线也很容易:
import matplotlib.pyplot as plt
for index, group in df.groupby("t"):
plt.plot(group["x"], group["y"])
plt.show()