如何绘制单个数据点?
Posted
技术标签:
【中文标题】如何绘制单个数据点?【英文标题】:How to plot one single data point? 【发布时间】:2015-03-03 00:13:37 【问题描述】:我有以下代码来绘制一条线和一个点:
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')
如何显示单个数据点?
【问题讨论】:
好的,谢谢您的回答。是否存在单个数据点的绘图方法?如果是这样,你能说出它的名字吗?谢谢! 彼得,感谢您的提问。我对其进行了编辑以使其成为可重现的最小示例。如果可能,请在以后尝试这样做。我还删除了时间序列和预测标签(这不是建模问题),并添加了 pandas 标签(因为它涉及使用pandas
进行绘图)。
【参考方案1】:
要绘制单个点,您可以执行以下操作:
plt.plot([x], [y], marker='o', markersize=3, color="red")
【讨论】:
注意:你也可以省略括号。 我认为 OP 想要的部分内容是让这一点也出现在图例中,因为他们在熊猫绘图中使用了label
参数。有没有办法在这里做到这一点?在新的可重现示例中,这不起作用:plt.plot(point['x'], point['y'], marker='o', markersize=3, color='red', label='point')
。
这会使用不同的点集删除绘图的轴。【参考方案2】:
绘制单个数据点时,不能使用线条绘制。仔细想想,这一点很明显,因为在绘制线条时,您实际上是在 个数据点之间绘制的,因此如果您只有一个数据点,那么您就没有任何东西可以连接您的线条了。
您可以使用标记绘制单个数据点,这些通常直接绘制在数据点上,因此即使只有一个数据点也没关系。
目前你正在使用
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
进行绘图,您可以在表here 中找到各种样式参数。要在不同的样式之间进行选择(例如,如果您在有多个数据点时不需要标记),那么您只需检查数据集的长度,然后使用适当的样式。
【讨论】:
你也不需要重新分配ax
。【参考方案3】:
使用.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 的方法,右边是我的方法:
【讨论】:
【参考方案4】:在相关代码的最后一行,将 style='-r' 替换为 kind='scatter':
ax = point.plot(x='x', y='y', ax=ax, kind='scatter', label='point')
您可以选择在对 point.plot 的调用中添加颜色参数:
ax = point.plot(x='x', y='y', ax=ax, kind='scatter', label='point', color='red')
【讨论】:
以上是关于如何绘制单个数据点?的主要内容,如果未能解决你的问题,请参考以下文章