用Pandas Dataframe 绘制不同颜色的多条线

mwkjh3gx  于 2023-02-07  发布在  其他
关注(0)|答案(6)|浏览(274)

我有一个 Dataframe ,如下所示

color  x   y
0    red  0   0
1    red  1   1
2    red  2   2
3    red  3   3
4    red  4   4
5    red  5   5
6    red  6   6
7    red  7   7
8    red  8   8
9    red  9   9
10  blue  0   0
11  blue  1   1
12  blue  2   4
13  blue  3   9
14  blue  4  16
15  blue  5  25
16  blue  6  36
17  blue  7  49
18  blue  8  64
19  blue  9  81

我最终想要两条线,一条蓝线,一条红线,红线应该是y=x,蓝线应该是y=x^2
当我执行以下操作时:

df.plot(x='x', y='y')

输出如下:

有没有办法让Pandas知道有两个集合?并相应地将它们分组。我希望能够指定列color作为集合的区分符

vxqlmq5t

vxqlmq5t1#

另一种简单的方法是使用pandas.DataFrame.pivot函数来格式化数据。
使用pandas.DataFrame.plot绘图。如果'color'列中的颜色存在于matplotlib: List of named colors中,则可以将其传递给color参数。

# sample data
df = pd.DataFrame([['red', 0, 0], ['red', 1, 1], ['red', 2, 2], ['red', 3, 3], ['red', 4, 4], ['red', 5, 5], ['red', 6, 6], ['red', 7, 7], ['red', 8, 8], ['red', 9, 9], ['blue', 0, 0], ['blue', 1, 1], ['blue', 2, 4], ['blue', 3, 9], ['blue', 4, 16], ['blue', 5, 25], ['blue', 6, 36], ['blue', 7, 49], ['blue', 8, 64], ['blue', 9, 81]],
                  columns=['color', 'x', 'y'])

# pivot the data into the correct shape
df = df.pivot(index='x', columns='color', values='y')

# display(df)
color  blue  red
x               
0         0    0
1         1    1
2         4    2
3         9    3
4        16    4
5        25    5
6        36    6
7        49    7
8        64    8
9        81    9

# plot the pivoted dataframe; if the column names aren't colors, remove color=df.columns
df.plot(color=df.columns, figsize=(5, 3))

wbgh16ku

wbgh16ku2#

您可以使用groupby根据颜色将DataFrame拆分为子组:

for key, grp in df.groupby(['color']):
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_table('data', sep='\s+')
fig, ax = plt.subplots()

for key, grp in df.groupby(['color']):
    ax = grp.plot(ax=ax, kind='line', x='x', y='y', c=key, label=key)

plt.legend(loc='best')
plt.show()

产量

lc8prwob

lc8prwob3#

如果安装了seaborn,则有一种更简单的方法,不需要执行pivot

import seaborn as sns

sns.lineplot(data=df, x='x', y='y', hue='color')
1sbrub3j

1sbrub3j4#

您也可以尝试使用以下代码在Pandas数据框中绘制不同颜色的多条线。

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
from pandas import DataFrame

value1 = [10, 20, 30, 40, 50] 
value2 = [5, 10, 15, 20, 25]
value3 = [8, 9, 10, 15, 20]

results1 = DataFrame({'SAC': value1, 'TD3': value2, 'DDPG': value3})

results1.plot()
plt.legend(loc='lower right')
plt.xlabel("Episode")
plt.ylabel("Rewards")
plt.show()

输出:

bwitn5fc

bwitn5fc5#

最常用的方法是基于color组绘制不同的颜色,也就是说,我们使用Dataframe.groupby对颜色进行分组,然后在相关轴上绘制数据。
例如

import numpy as np, pandas as pd, matplotlib.pyplot as plt
n = 1000
xy = np.random.rand(n,  2) + np.random.rand(n)[:, None]
color = np.random.randint(0, 3, size = n)
data = dict(x = xy[:, 0], y = xy[:, 1], color = color)
df = pd.DataFrame(data)

fig, ax = plt.subplots()
for labels, dfi in df.groupby("color"):
    dfi.plot(ax = ax, x = 'x', y = 'y', label = labels)
ax.legend(title = 'color')
fig.show()

drkbr07n

drkbr07n6#

您可以使用此代码获得所需的输出

import pandas as pd
import matplotlib.pyplot as plt
df = pd.DataFrame({'color': ['red','red','red','blue','blue','blue'], 'x': [0,1,2,3,4,5],'y': [0,1,2,9,16,25]})
print df

  color  x   y
0   red  0   0
1   red  1   1
2   red  2   2
3  blue  3   9
4  blue  4  16
5  blue  5  25

绘制图形

a = df.iloc[[i for i in xrange(0,len(df)) if df['x'][i]==df['y'][i]]].plot(x='x',y='y',color = 'red')
df.iloc[[i for i in xrange(0,len(df)) if df['y'][i]== df['x'][i]**2]].plot(x='x',y='y',color = 'blue',ax=a)

plt.show()

输出

相关问题