如何绘制数据框的每一行
How to bar plot each row of a dataframe
数据框如下所示:
import pandas as pd
import numpy as np # used for the nan values
data = {'card_name': ['Diamonds', 'Clovers', 'HorseShoe'], '': [1000.0, 10.0, np.nan], '': [500.0, np.nan, 1873.0], '': [25, 213, 4657], '': [np.nan, 2199.0, np.nan], '': [1500.0, np.nan, 344.0], '': [np.nan, 43.0, 239.0], '': [30.0, 2.0, np.nan], '0': [1.0, np.nan, 748.0]}
df = pd.DataFrame(data)
card_name 0
0 Diamonds 1000 500 25 NaN 1500 NaN 30 1
1 Clovers 10 NaN 213 2199 NaN 43 2 NaN
2 HorseShoe NaN 1873 4657 NaN 344 239 NaN 748
美元符号栏名称下的数字是相应card_name上的奖品数量。
我正在尝试绘制每个 card_name 的图表并显示所有列的奖品数量。
我正在使用 Python 和 Pandas 以及 Matplotlib/Seaborn
- 所需数据框的形状取决于使用哪个绘图 API 进行绘图。
pandas
和 seaborn
都依赖于 matplotlib
,但需要不同的形状才能获得相同的结果。
pandas
- 设置
'card_name'
为索引,然后用.T
转置dataframe。
- 直接使用
pandas.DataFrame.plot
和 kind='bar'
绘制数据帧。索引绘制为轴。
# set the index and transpose
dft = df.set_index('card_name').T
# display(dft)
card_name Diamonds Clovers HorseShoe
1000.0 10.0 NaN
500.0 NaN 1873.0
25.0 213.0 4657.0
NaN 2199.0 NaN
1500.0 NaN 344.0
NaN 43.0 239.0
30.0 2.0 NaN
0 1.0 NaN 748.0
# plot
dft.plot(kind='bar', rot=0)
seaborn
- 使用
pandas.DataFrame.melt
将数据帧从宽格式转换为长格式
- 使用
seaborn.barplot
, or with seaborn.catplot
和 kind='bar'
绘制数据,然后使用 hue=
指定要着色的列。
# convert the dataframe to long format
dfm = df.melt(id_vars='card_name')
# display(dfm.head())
card_name variable value
0 Diamonds 1000.0
1 Clovers 10.0
2 HorseShoe NaN
3 Diamonds 500.0
4 Clovers NaN
ax = sns.barplot(data=dfm, x='variable', y='value', hue='card_name')
subplots
pandas
- 添加参数
subplots=True
# using the previously transformed dataframe dft
axes = dft.plot(kind='bar', rot=0, subplots=True, figsize=(6, 10))
seaborn
- 通过指定
row=
and/or col=
参数,使用 .catplot
获取子图更容易。
# using the previously transformed dataframe dfm
p = sns.catplot(kind='bar', data=dfm, x='variable', y='value', row='card_name', height=3, aspect=1.5)
数据框如下所示:
import pandas as pd
import numpy as np # used for the nan values
data = {'card_name': ['Diamonds', 'Clovers', 'HorseShoe'], '': [1000.0, 10.0, np.nan], '': [500.0, np.nan, 1873.0], '': [25, 213, 4657], '': [np.nan, 2199.0, np.nan], '': [1500.0, np.nan, 344.0], '': [np.nan, 43.0, 239.0], '': [30.0, 2.0, np.nan], '0': [1.0, np.nan, 748.0]}
df = pd.DataFrame(data)
card_name 0
0 Diamonds 1000 500 25 NaN 1500 NaN 30 1
1 Clovers 10 NaN 213 2199 NaN 43 2 NaN
2 HorseShoe NaN 1873 4657 NaN 344 239 NaN 748
美元符号栏名称下的数字是相应card_name上的奖品数量。
我正在尝试绘制每个 card_name 的图表并显示所有列的奖品数量。
我正在使用 Python 和 Pandas 以及 Matplotlib/Seaborn
- 所需数据框的形状取决于使用哪个绘图 API 进行绘图。
pandas
和seaborn
都依赖于matplotlib
,但需要不同的形状才能获得相同的结果。
pandas
- 设置
'card_name'
为索引,然后用.T
转置dataframe。 - 直接使用
pandas.DataFrame.plot
和kind='bar'
绘制数据帧。索引绘制为轴。
# set the index and transpose
dft = df.set_index('card_name').T
# display(dft)
card_name Diamonds Clovers HorseShoe
1000.0 10.0 NaN
500.0 NaN 1873.0
25.0 213.0 4657.0
NaN 2199.0 NaN
1500.0 NaN 344.0
NaN 43.0 239.0
30.0 2.0 NaN
0 1.0 NaN 748.0
# plot
dft.plot(kind='bar', rot=0)
seaborn
- 使用
pandas.DataFrame.melt
将数据帧从宽格式转换为长格式
- 使用
seaborn.barplot
, or withseaborn.catplot
和kind='bar'
绘制数据,然后使用hue=
指定要着色的列。
# convert the dataframe to long format
dfm = df.melt(id_vars='card_name')
# display(dfm.head())
card_name variable value
0 Diamonds 1000.0
1 Clovers 10.0
2 HorseShoe NaN
3 Diamonds 500.0
4 Clovers NaN
ax = sns.barplot(data=dfm, x='variable', y='value', hue='card_name')
subplots
pandas
- 添加参数
subplots=True
# using the previously transformed dataframe dft
axes = dft.plot(kind='bar', rot=0, subplots=True, figsize=(6, 10))
seaborn
- 通过指定
row=
and/orcol=
参数,使用.catplot
获取子图更容易。
# using the previously transformed dataframe dfm
p = sns.catplot(kind='bar', data=dfm, x='variable', y='value', row='card_name', height=3, aspect=1.5)