如何使用matplotlib在两条独立的图线上的标记之间绘制一条新线?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用matplotlib在两条独立的图线上的标记之间绘制一条新线?相关的知识,希望对你有一定的参考价值。

我已经创建了一个图形,目前为每个索引显示了两个图(仅标记)。我想创建第三个图(带线)连接前面两个条目。

绘图目前的样子。

enter image description here

我如何绘制一条线来连接每个项目的红点和蓝点?

我目前画图的代码是这样的。

plt.figure(figsize=(8,7))
plt.plot(points_vs_xpoints["xpts"],points_vs_xpoints.index, label="Projected", linestyle = 'None', marker="o")
plt.plot(points_vs_xpoints["pts"], points_vs_xpoints.index, label="Actual", linestyle = 'None', marker="o", markeredgecolor="r", markerfacecolor='None')

plt.xticks(np.arange(0, 100, 10))
plt.xticks(rotation=90)
plt.legend()
plt.grid(color='grey', linewidth=0.2)
plt.tight_layout()
plt.show()
答案

如果我对您的要求理解正确的话,这应该是个好办法。

from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection

plt.figure(figsize=(8,7))
f, ax = plt.subplots(1, 1)
ax.plot(points_vs_xpoints["xpts"],points_vs_xpoints.index, label="Projected", linestyle = 'None', marker="o")
ax.plot(points_vs_xpoints["pts"], points_vs_xpoints.index, label="Actual", linestyle = 'None', marker="o", markeredgecolor="r", markerfacecolor='None')

lines = LineCollection([[[el[0], points_vs_xpoints.index[i]], [el[1], points_vs_xpoints.index[i]]] for i, el in enumerate(zip(points_vs_xpoints["xpts"],points_vs_xpoints["pts"]))], label='Connection', linestyle='dotted')
ax.add_collection(lines)

ax.set_xticks(np.arange(0, 100, 10))
plt.tick_params(rotation=90)
ax.legend()
ax.grid(color='grey', linewidth=0.2)
f.tight_layout()
plt.show()

请看这里的结果图

编辑

我错误地认为你的索引是一个数字索引。如果是字符串的索引,你可以试试这样的方法。

from matplotlib import pyplot as plt
from matplotlib.collections import LineCollection

plt.figure(figsize=(8,7))
f, ax = plt.subplots(1, 1)
ax.plot(points_vs_xpoints["xpts"],points_vs_xpoints.index, label="Projected", linestyle = 'None', marker="o")
ax.plot(points_vs_xpoints["pts"], points_vs_xpoints.index, label="Actual", linestyle = 'None', marker="o", markeredgecolor="r", markerfacecolor='None')

# Let's go with a simple index
lines = LineCollection([[[el[0], i], [el[1], i]] for i, el in enumerate(zip(points_vs_xpoints["xpts"],points_vs_xpoints["pts"]))], label='Connection', linestyle='dotted')
ax.add_collection(lines)

# Change for labels rotation
ax.set_xticklabels(np.arange(0, 100, 10), rotation=90)
ax.legend()
ax.grid(color='grey', linewidth=0.2)
f.tight_layout()
plt.show()

请看这里的结果图

以上是关于如何使用matplotlib在两条独立的图线上的标记之间绘制一条新线?的主要内容,如果未能解决你的问题,请参考以下文章

如何用matplotlib画多个独立窗口的图

如何用matplotlib画多个独立窗口的图

如何在origin中绘制多条曲线

origin 线型图式!! 想在现有的线段上添加比如 三角形、◆、♢等图式怎么办?? 急求!

matplotlib包画基本的图

Matplotlib - 将 Xticks 更改为线上的值而不是数据点