如何绘制单个数据点?

46

我有以下代码来绘制线条和点:

df = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 6]})
point = pd.DataFrame({'x': [2], 'y': [5]})
ax = df.plot(x='x', y='y', label='line')
ax = point.plot(x='x', y='y', ax=ax, style='r-', label='point')

如何让单个数据点显示出来?

带有线但没有点的图


1
好的,谢谢你的回答。是否存在用于单个数据点的绘图方法?如果有,你能告诉我它的名称吗?谢谢! - Peter Knutsen
Peter,感谢你的提问。我编辑了它,使其成为可重现的最小示例。如果可能的话,请在将来尝试这样做。我还删除了时间序列和预测标签(这不是建模问题),并添加了pandas标签(因为它涉及使用pandas进行绘图)。 - Max Ghenis
4个回答

117

要绘制单个点,您可以执行以下操作:

plt.plot([x], [y], marker='o', markersize=3, color="red")

3
好的,请提供需要翻译的中文内容。 - Karlo
5
我认为 OP 的一部分需求是在图例中显示点,考虑到他们在 Pandas 绘图中使用了 label 参数。是否有方法可以在这里实现呢?在新的可重现示例中,这个语句无法实现:plt.plot(point['x'], point['y'], marker='o', markersize=3, color='red', label='point') - Max Ghenis
使用不同的点集,可以移除绘图中的坐标轴。 - Paul Kenjora

11

当绘制单个数据点时,您不能使用线条进行绘制。这是显而易见的,因为绘制线条实际上是在数据点之间绘制,因此如果您只有一个数据点,那么就没有东西可以将您的线连接到。

但是,您可以使用标记绘制单个数据点,这些标记通常直接绘制在数据点上,因此即使您只有一个数据点也没关系。

目前您正在使用

ax = point.plot(x='x', y='y', ax=ax, style='r-', label='point')

绘制曲线。这将生成一条红色线(r代表红色,-代表实线)。如果使用以下代码,则会得到蓝色十字形(b代表蓝色,x代表十字形)。

ax = point.plot(x='x', y='y', ax=ax, style='bx', label='point')

pandas在绘图时内部使用matplotlib库,你可以在这里找到各种样式参数的表格如果你需要在有多个数据点时去除标记,那么你可以检查数据集的长度然后选择适当的样式。


你也不需要重新分配 ax - Max Ghenis

9

在使用.plot(..)方法时存在的另一个问题是,图例是以线条而不是的形式显示。

为了解决这个问题,我建议使用plt.scatter(..)方法:

df = pd.DataFrame({'x': [1, 2, 3], 'y': [3, 4, 6]})
point = pd.DataFrame({'x': [2], 'y': [5]})

fig, axes = plt.subplots(1, 2, figsize=(20, 5))

# OP VERSION
df.plot('x', 'y', ax=axes[0], label='line')
point.plot('x', 'y', ax=axes[0], style='r-', label='point')

# MY VERSION
df.plot('x', 'y', ax=axes[1], label='line')
axes[1].scatter(point['x'], point['y'], marker='o', color='r', label='point')
axes[1].legend(loc='upper left')

我使用的方法在左侧,OP的方法在右侧,下面是结果: comparison_of_plot_methods

1
在问题的最后一行中,将style='-r'替换为kind='scatter':
ax = point.plot(x='x', y='y', ax=ax, kind='scatter', label='point')

enter image description here

你可以选择在point.plot调用中添加一个颜色参数:
ax = point.plot(x='x', y='y', ax=ax, kind='scatter', label='point', color='red')

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接