Matplotlib:绘制pandas中的整个列值

时间:2017-08-31 17:30:31

标签: python-3.x pandas matplotlib plot

我有以下数据框my_df

        my_1     my_2     my_3
--------------------------------
0         5       7        4
1         3       5       13
2         1       2        8
3        12       9        9
4         6       1        2

我想制作一个图表,其中x轴是my_1,my_2和my_3的分类值。 y轴是整数。对于my_df中的每一列,我想在x = my_i处绘制其所有5个值。我应该在matplotlib中使用什么样的情节?谢谢!

1 个答案:

答案 0 :(得分:2)

你可以制作条形图:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'my_1': [5, 3, 1, 12, 6], 'my_2': [7, 5, 2, 9, 1], 'my_3': [4, 13, 8, 9, 2]})

df.T.plot(kind='bar')
plt.show()

enter image description here

或散点图:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'my_1': [5, 3, 1, 12, 6], 'my_2': [7, 5, 2, 9, 1], 'my_3': [4, 13, 8, 9, 2]})

fig, ax = plt.subplots()
cols = np.arange(len(df.columns))
x = np.repeat(cols, len(df))
y = df.values.ravel(order='F')
color = np.tile(np.arange(len(df)), len(df.columns))
scatter = ax.scatter(x, y, s=150, c=color)
ax.set_xticks(cols)
ax.set_xticklabels(df.columns)
cbar = plt.colorbar(scatter)
cbar.set_ticks(np.arange(len(df)))
plt.show()

enter image description here

只是为了好玩,以下是如何使用Pandas'制作相同的散点图。 df.plot

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'my_1': [5, 3, 1, 12, 6], 'my_2': [7, 5, 2, 9, 1], 'my_3': [4, 13, 8, 9, 2]})

columns = df.columns
index = df.index
df = df.stack()
df.index.names = ['color', 'column']
df = df.rename('y').reset_index()
df['x'] = pd.Categorical(df['column']).codes
ax = df.plot(kind='scatter', x='x', y='y', c='color', colorbar=True, 
             cmap='viridis', s=150)
ax.set_xticks(np.arange(len(columns)))
ax.set_xticklabels(columns)
cbar = ax.collections[-1].colorbar
cbar.set_ticks(index)
plt.show()

不幸的是,它需要相当多的DataFrame操作才能调用 df.plot然后需要一些额外的matplotlib调用来设置滴答 散点图和颜色条上的标记。由于熊猫不在这里省力, 我会选择上面显示的第一个(NumPy / matplotlib)方法。