如何为我的数据集创建多线图?
How to create a multi-line plot for my dataset?
我有以下 pandas DataFrame df
:
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
我想创建一个X轴包含Event1
、Event2
和Event3
的多线图,而Y轴应该是相应的数值。应该有 3 个系列:Series1
、Series2
、Series3
.
如何在 sns.pointplot(x=???, y=???, hue=???,data=df)
中定义 x
、y
和 hue
?
plt.figure(figsize=(12,8))
ax = sns.pointplot(x=???, y=???, hue=???,data=df)
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()
我不确定如何用 seaborn 做到这一点,但用 matplolib 是这样的:
for i in df.index.values:
plt.plot(list(df.loc[i]))
plt.show()
在这种情况下,X
ax 将取值 0、1 和 2,而 Y
ax 将取您的行的值。只需在最后执行 plt.show()
即可将所有图都放在一个图中。在 seaborn 中应该以同样的方式工作。
将枢轴 df table 重组为经典数据框并根据需要绘制:
import matplotlib.pylab as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
print(df)
# reorganize df to classic table
df2=df.stack().reset_index()
df2.columns = ['Series','Event','Values']
print(df2)
plt.figure(figsize=(12,8))
ax = sns.pointplot(x='Event', y='Values', hue='Series',data=df2)
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()
df2:
Series Event Values
0 Series1 Event1 15.00
1 Series1 Event2 1.00
2 Series1 Event3 22.00
3 Series2 Event1 16.00
4 Series2 Event2 1.26
5 Series2 Event3 80.00
6 Series3 Event1 27.00
7 Series3 Event2 0.00
8 Series3 Event3 15.00
获得所需情节的最简单方法是df.T.plot()
。
import pandas as pd
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
df.T.plot()
我有以下 pandas DataFrame df
:
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
我想创建一个X轴包含Event1
、Event2
和Event3
的多线图,而Y轴应该是相应的数值。应该有 3 个系列:Series1
、Series2
、Series3
.
如何在 sns.pointplot(x=???, y=???, hue=???,data=df)
中定义 x
、y
和 hue
?
plt.figure(figsize=(12,8))
ax = sns.pointplot(x=???, y=???, hue=???,data=df)
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()
我不确定如何用 seaborn 做到这一点,但用 matplolib 是这样的:
for i in df.index.values:
plt.plot(list(df.loc[i]))
plt.show()
在这种情况下,X
ax 将取值 0、1 和 2,而 Y
ax 将取您的行的值。只需在最后执行 plt.show()
即可将所有图都放在一个图中。在 seaborn 中应该以同样的方式工作。
将枢轴 df table 重组为经典数据框并根据需要绘制:
import matplotlib.pylab as plt
import pandas as pd
import seaborn as sns
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
print(df)
# reorganize df to classic table
df2=df.stack().reset_index()
df2.columns = ['Series','Event','Values']
print(df2)
plt.figure(figsize=(12,8))
ax = sns.pointplot(x='Event', y='Values', hue='Series',data=df2)
ax.grid(b=True, which='major', color='#d3d3d3', linewidth=1.0)
ax.grid(b=True, which='minor', color='#d3d3d3', linewidth=0.5)
plt.show()
df2:
Series Event Values
0 Series1 Event1 15.00
1 Series1 Event2 1.00
2 Series1 Event3 22.00
3 Series2 Event1 16.00
4 Series2 Event2 1.26
5 Series2 Event3 80.00
6 Series3 Event1 27.00
7 Series3 Event2 0.00
8 Series3 Event3 15.00
获得所需情节的最简单方法是df.T.plot()
。
import pandas as pd
df = pd.DataFrame(columns=["Event1", "Event2", "Event3"],
data=[[15,1,22],
[16,1.26,80],
[27,0,15]])
df = df.set_index([["Series1", "Series2", "Series3"]])
df.T.plot()