我有一个如下所示的数据框: Dataframe Snapshot
我想在图表上用JUST POINTS制作一个散点图,我希望所有的点在图表上的列中排成一行,其中每列是y轴上的一个月(Jan,Feb,Mar等) 。实际数据点将绘制在y轴上。
当我这样做时
df.plot.scatter()
当然要我声明一个x和y值。如果你查看我附加的数据帧图片,我真的不能这样做。如何绘制每个月的所有点在每个月标签上方的x轴上垂直排列的位置?我也尝试过:
df.plot.box
这基本上给了我想要的东西,但我只想要点而不是盒子/胡须它也试图绘制。我只想要点数。
答案 0 :(得分:1)
我不相信您可以使用pandas绘制带有分类变量的散点图。你可以为你想要绘制的每个月分配一个数值,尽管你也可以使用matplotlib
创建测试数据集:
data = np.random.randn(4, 3)
df = pd.DataFrame(data, columns=['Jan', 'Feb', 'Mar'])
将此转换为长格式:
df = df.melt()
绘图时,您需要指定每个类别的x位置。我使用枚举,尽管您也可以使用数值创建一个新列
groups = df.groupby('variable')
fig, ax = plt.subplots()
x_ticks = []
x_ticklabels = []
for i, (name, group) in enumerate(groups):
y = group.value
x = [i]*len(y)
ax.scatter(x, y)
x_ticks.append(i)
x_ticklabels.append(name)
然后,您可以设置刻度标签以匹配您的x值:
ax.set_xticks(x_ticks)
ax.set_xticklabels(x_ticklabels);
<强>更新强> 我喜欢以长篇形式处理事物,因为每个条目都成为单个观察,但我意识到在不转换数据的情况下循环遍历列会更简洁:
fig, ax = plt.subplots()
for i, (name, value) in enumerate(df.iteritems()):
ax.scatter([i]*len(value), value)
ax.set_xticks(range(len(df.columns)))
ax.set_xticklabels(df.columns);