Matplotlib 非均匀分布数据的虚线样式

Matplotlib 非均匀分布数据的虚线样式,matplotlib,styles,line,Matplotlib,Styles,Line,我不熟悉Python和MatPlotlib。 这是我第一次向Stackoverflow发帖——我在别处找不到答案,非常感谢您的帮助 我使用的是WindowsXP,带有Enthound Canopy v1.1.1(32位) 我想通过数据散点图绘制一条点式线性回归线,其中x和y数组都包含随机浮点数据 虚线中的点不是沿着回归线均匀分布的,并且在红色线的中间被“涂在一起”,使它看起来很乱(参见附图中最小的示例代码所产生的上图)。 如果x值数组中的项均匀分布(下图),则似乎不会发生这种情况 因此,我猜测这

我不熟悉Python和MatPlotlib。 这是我第一次向Stackoverflow发帖——我在别处找不到答案,非常感谢您的帮助

我使用的是WindowsXP,带有Enthound Canopy v1.1.1(32位)

我想通过数据散点图绘制一条点式线性回归线,其中x和y数组都包含随机浮点数据

虚线中的点不是沿着回归线均匀分布的,并且在红色线的中间被“涂在一起”,使它看起来很乱(参见附图中最小的示例代码所产生的上图)。 如果x值数组中的项均匀分布(下图),则似乎不会发生这种情况

因此,我猜测这是MatplotLib如何呈现虚线的问题,或者是Canopy如何将Python与MatplotLib接口的问题

请告诉我一个解决方法,使虚线字体上的点均匀分布;即使x和y数据分布不均匀;在仍然使用天篷和Matplotlib的情况下

(总的来说,我一直渴望提高我的编码技能——如果我的示例中的任何代码可以写得更简洁、更简洁,我将非常感谢您的专业知识)

多谢期待

戴夫 (英国)

欢迎来到SO

您自己已经确定了问题,但是对于随机x阵列导致行中出现“混乱”似乎有点惊讶。但是你在同一个位置上反复画一条虚线,所以在我看来这是一种正常的行为,它被涂抹在有多条虚线的地方

如果您不想这样做,可以对数组进行排序,并使用它来计算回归线并绘制回归线。因为这是一个线性回归,所以只使用最小值和最大值也可以

x1_sorted = np.sort(x1)
line = (slope * x1_sorted) + intercept

如果
x1
变得非常大,则最后一个应该更快

关于你最后的评论。在您的示例中,您使用所谓的“状态机”环境进行绘图。这意味着指定的命令将应用于激活图形和激活轴(子地块)

您也可以考虑使用OO方法来获得图形和轴对象。这意味着您可以随时访问任何图形或轴,而不仅仅是激活的图形或轴。例如,将轴传递给函数时,它很有用

在你的例子中,这两种方法都同样有效,这更像是一个品味问题

一个小例子:

# create a figure with 2 subplots (2 rows, 1 column)
fig, axs = plt.subplots(2,1) 

# plot in the first subplots
axs[0].scatter(x1,y,color='blue', marker='o')
axs[0].plot(x1,line,'r:',label="Regression Line")

# plot in the second
axs[1].plot()
etc...
欢迎来到SO

您自己已经确定了问题,但是对于随机x阵列导致行中出现“混乱”似乎有点惊讶。但是你在同一个位置上反复画一条虚线,所以在我看来这是一种正常的行为,它被涂抹在有多条虚线的地方

如果您不想这样做,可以对数组进行排序,并使用它来计算回归线并绘制回归线。因为这是一个线性回归,所以只使用最小值和最大值也可以

x1_sorted = np.sort(x1)
line = (slope * x1_sorted) + intercept

如果
x1
变得非常大,则最后一个应该更快

关于你最后的评论。在您的示例中,您使用所谓的“状态机”环境进行绘图。这意味着指定的命令将应用于激活图形和激活轴(子地块)

您也可以考虑使用OO方法来获得图形和轴对象。这意味着您可以随时访问任何图形或轴,而不仅仅是激活的图形或轴。例如,将轴传递给函数时,它很有用

在你的例子中,这两种方法都同样有效,这更像是一个品味问题

一个小例子:

# create a figure with 2 subplots (2 rows, 1 column)
fig, axs = plt.subplots(2,1) 

# plot in the first subplots
axs[0].scatter(x1,y,color='blue', marker='o')
axs[0].plot(x1,line,'r:',label="Regression Line")

# plot in the second
axs[1].plot()
etc...