gpt4 book ai didi

python - 如何在 matplotlib 中绘制受数据点限制的网格

转载 作者:行者123 更新时间:2023-12-01 00:40:40 25 4
gpt4 key购买 nike

我有一个子图,我想通过绘制与轴平行的网格线来强调数据点,但仅填充轴和数据点之间的空间(正常网格超出数据点)。

我知道在 matplotlib 中绘制直线和矩形有多种方法。我可以迭代我的数据,并为从 (0, 0) 开始的每个数据点绘制一个矩形。但我想知道是否有一种方法可以更轻松地做到这一点。

正常网格: https://i.imgur.com/0xofyfG.png

我想要的网格: https://i.imgur.com/lvM3ZBC.png

编辑:这是我的代码的精简版本,其中包含我所描述的所有子图,我希望有一个网格。

from matplotlib import pyplot as plt

x_data1 = [1, 2, 5, 7, 20]
y_data1 = [5.20, 10.40, 26.00, 36.40, 104.00]

y_data2 = [3.7, 7.4, 18.5, 25.9, 74]

y_data3 = [8.95, 17.9, 44.75, 62.65, 179]

fig, ax = plt.subplots(1, 3, figsize=(12, 3), tight_layout=True, sharey="all")

ax[0].plot(x_data1, y_data1, marker="o")
ax[0].grid(which="major", linestyle="--", color="black", alpha=0.3)
ax[0].set_xticks(x_data1)
ax[0].set_yticks(y_data1)
ax[0].set_ylim(bottom=0)
ax[0].set_title("Multiplier: 5.2")

ax[1].plot(x_data1, y_data1,
x_data1, y_data2, marker="o")
ax[1].set_title("Mult.: 5.2, Mult.: 3.7")

ax[2].plot(x_data1, y_data1,
x_data1, y_data3, marker="o")
ax[2].set_title("Mult.: 5.2, Mult.: 8.95")

plt.show()

最佳答案

网格线应始终到达坐标区,与坐标区限制无关。因此,您需要的是一条线,其一端在混合坐标系中定义,其中一个坐标是轴坐标中的 0 。另一端将完全位于数据坐标中。实现此目的的一种方法是使用 matplotlib.patches.ConnectionPatch

import matplotlib.pyplot as plt
from matplotlib.patches import ConnectionPatch

data_x = [1,2,5,7,20]
data_y = [5.2,10.40, 26.00, 36.40,104.00]
fig, ax = plt.subplots()

# Create your own grid
for x,y in zip(data_x, data_y):
cp1 = ConnectionPatch((x,0), (x,y),
coordsA=ax.get_xaxis_transform(),
coordsB="data", axesA=ax, axesB=ax,
color='grey', linestyle='--', )
cp2 = ConnectionPatch((0,y), (x,y),
coordsA=ax.get_yaxis_transform(),
coordsB="data", axesA=ax, axesB=ax,
color='grey', linestyle='--')
ax.add_patch(cp1)
ax.add_patch(cp2)


plt.scatter(data_x, data_y, color='black')
plt.plot(data_x, data_y, color='black')

plt.margins(x=0, y=0)
plt.xticks(data_x)
plt.yticks(data_y)
plt.show()

与其他答案相比,此代码的主要区别是在交互式缩放或平移绘图时可以观察到。

enter image description here

关于python - 如何在 matplotlib 中绘制受数据点限制的网格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57373010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com