【问题标题】:Draw a line with matplotlib using the axis coordinate system使用轴坐标系用matplotlib画一条线
【发布时间】:2019-12-11 04:21:15
【问题描述】:

我想绘制一条跨越整个 y 轴的垂直线,例如位于 x 轴的 x=.25 位置,而不是 数据轴

根据this answer(显然不完全准确)axhline,axvline 函数将在轴坐标中绘制一条水平/垂直线,如下所示:

方法axhline和axvline用于在轴坐标

处画线

但这似乎不起作用。 axhline docs say

水平线数据坐标中的y位置。

果然,上面答案中给出的代码显示:

与上述答案中显示的旧图进行比较(代码如下):

这是最近发生的变化还是我遗漏了一些非常明显的东西?如果它确实发生了变化,我现在如何在轴坐标中画一条线?

我正在使用 Python 3.7.3 和 matplotlib 3.1.0。


import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
y = np.sin(x)

fig, ax = plt.subplots()

ax.plot(x, y)
ax.axhline(y=0.5, xmin=0.0, xmax=1.0, color='r')
ax.hlines(y=0.6, xmin=0.0, xmax=1.0, color='b')

plt.show()

【问题讨论】:

  • 这取决于你的min max 参数,不是吗?
  • axvline 没有故意改变行为。该问题不允许查看不希望的内容。
  • 我从链接的问题中推断,由于函数使用坐标系统,min=0 和 max =1 应该跨越轴的整个范围,但现在它只是从值 x=0 绘制一条线到 x=1,而预期是 x=0,x=5
  • 你是对的,那个答案中的图像是错误的。红线已关闭 - 它既不在数据中的 y=0.5 处,也不在轴坐标中。因此,我认为可以假设它是由答案中未显示的代码生成的。但是,如果您将错误的图像替换为使用该代码获得的图像,那么答案是正确的,对吗?只编辑该答案可能是有意义的。
  • 好的,我在下面回答了这个问题;也许你想用你真正想知道的东西来编辑你的问题,这样问答就连贯了?!

标签: python matplotlib


【解决方案1】:

回答问题

如果我想绘制一条跨越整个 y 轴的垂直线,位于 x 轴的 x=.25 位置,而不是数据轴。我该怎么做?

在这种情况下,该线的两个 x 坐标均为 0.25,下端的 y 坐标为 0,上端为 1。线的变换设置为轴坐标系ax.transAxes

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.set(xlim=(0.5,1.5), ylim=(-50,50))

ax.plot([0.25,0.25],[0,1], transform=ax.transAxes)

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-27
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多