kazuya8375 发表于 2023-10-17 22:20:13

matplotlib中的问题

import matplotlib.pyplot as plt

x =
y =

def mitu(x, y):
    plt.figure(figsize=(8, 6))
    plt.xlabel('X軸')
    plt.ylabel('Y軸')
    plt.legend()
    plt.xlim(0, 300)
    plt.ylim(0, 700)
    x_mid = sum(x) / len(x)
    y_mid = sum(y) / len(y)
    plt.scatter(x_mid, y_mid, label='點', color='black')

    for a, b in zip(x, y):
      plt.scatter(a, b, label='點', color='r')
      slope = (y_mid - b) / (x_mid - a)
      muti_slope = -(1 / slope)
      x_newmid = (x_mid + a) / 2
      y_newmid = (y_mid + b) / 2
      plt.axline((x_newmid, y_newmid), slope=muti_slope, linewidth=2, color='r')

    plt.savefig('output.png', dpi=300)
    plt.show()

mitu(x, y)

--------------------------------------------------------------------------------------------------------------
我划出来的中垂线怎么视觉效果差这么多,一看就不是中垂线


















陶远航 发表于 2023-10-17 22:20:55

你的代码中,你正在尝试为每对点(x, y)绘制中垂线。然而,你的中垂线的计算方法可能有误。你当前的方法是计算每对点和中心点之间的斜率,然后取其负倒数作为中垂线的斜率。这种方法实际上并不能保证得到的线是中垂线。

中垂线的定义是,它是连接两点的线段的垂直平分线。因此,你需要首先找到两点的中点,然后计算线段的斜率,取其负倒数作为中垂线的斜率。然而,你的代码中并没有明确指定这两点是哪两点,而是使用了所有的点和中心点。

如果你想要为每对连续的点(x, y)绘制中垂线,你可以修改你的代码如下:

import matplotlib.pyplot as plt

x =
y =

def mitu(x, y):
    plt.figure(figsize=(8, 6))
    plt.xlabel('X軸')
    plt.ylabel('Y軸')
    plt.xlim(0, 300)
    plt.ylim(0, 700)

    for i in range(len(x) - 1):
      x_mid = (x[ i] + x) / 2
      y_mid = (y[ i] + y) / 2
      plt.scatter(x_mid, y_mid, label='點', color='black')

      slope = (y - y[ i]) / (x - x[ i])
      muti_slope = -(1 / slope)

      plt.axline((x_mid, y_mid), slope=muti_slope, linewidth=2, color='r')

    plt.savefig('output.png', dpi=300)
    plt.show()

mitu(x, y)


这段代码将为每对连续的点(x, y)绘制中垂线。注意,这段代码假设x和y的值是按照点的连接顺序排序的。如果不是这样,你可能需要先对x和y进行排序。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-10-17 22:21:04

问题回答:

您好,根据您的描述,可能是由于坐标轴的范围设置不当导致视觉效果差。建议您根据数据的分布情况,适当调整坐标轴的范围,以便更好地观察数据的分布情况。

另外,您在绘制中垂线时,使用了plt.axline()函数,这个函数可以绘制直线,但是对于中垂线的绘制,可能需要使用其他方法。我推荐您可以使用plt.plot()函数来绘制中垂线,例如:


# 绘制垂直于x轴的中垂线
plt.plot(, , 'r--')


其中,表示中垂线的x坐标值相同,表示中垂线的y坐标值范围。'r--'表示绘制红色虚线。

希望以上信息能够帮助到您,如有疑问请随时提出,我会尽力为您解答。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}

isdkz 发表于 2023-10-17 22:21:08

问题出在计算中垂线斜率的地方。在代码中,计算斜率的公式是:

slope = (y_mid - b) / (x_mid - a)

然后求取中垂线斜率的倒数:

muti_slope = -(1 / slope)

这个计算方式是错误的。中垂线的斜率应该是被除数的倒数,而不是斜率的倒数。正确的计算方式是:

muti_slope = -1 / slope

将代码中的计算斜率的部分修改为正确的计算方式,即可得到正确的中垂线效果。修改后的代码如下:

import matplotlib.pyplot as plt

x =
y =

def mitu(x, y):
    plt.figure(figsize=(8, 6))
    plt.xlabel('X軸')
    plt.ylabel('Y軸')
    plt.legend()
    plt.xlim(0, 300)
    plt.ylim(0, 700)
    x_mid = sum(x) / len(x)
    y_mid = sum(y) / len(y)
    plt.scatter(x_mid, y_mid, label='點', color='black')

    for a, b in zip(x, y):
      plt.scatter(a, b, label='點', color='r')
      slope = (y_mid - b) / (x_mid - a)
      muti_slope = -1 / slope
      x_newmid = (x_mid + a) / 2
      y_newmid = (y_mid + b) / 2
      plt.axline((x_newmid, y_newmid), slope=muti_slope, linewidth=2, color='r')

    plt.savefig('output.png', dpi=300)
    plt.show()

mitu(x, y)


修改后的代码会正确绘制出中垂线的视觉效果。
页: [1]
查看完整版本: matplotlib中的问题