我不相信你能使用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);
![输入图像描述](https://istack.dev59.com/URRxz.webp)
更新
我喜欢以长格式处理事物,因为每个条目都成为一个单独的观察值,但我意识到通过循环遍历列而不转换数据会更加简洁:
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);