使用matplotlib绘制垂直线

使用matplotlib绘制垂直线,matplotlib,Matplotlib,我想用Matpotlib画一条垂直线,我使用的是axvline,但它不起作用 import sys import matplotlib matplotlib.use('Qt4Agg') from ui_courbe import * from PyQt4 import QtGui from matplotlib import pyplot as plt class Window(QtGui.QMainWindow, Ui_MainWindow): def __init__(sel

我想用Matpotlib画一条垂直线,我使用的是
axvline
,但它不起作用

import sys
import matplotlib
matplotlib.use('Qt4Agg')

from ui_courbe import *
from PyQt4 import  QtGui
from matplotlib import pyplot as plt


class Window(QtGui.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.setupUi(self) 
        self.boutonDessiner.clicked.connect(self.generatePlot)

    def generatePlot(self):
        # generate the plot 
        ax = self.graphicsView.canvas.fig.add_subplot(111)
        ax.plot([1,3,5,7],[2,5,1,-2])
        plt.axvline(x=4)
        self.graphicsView.canvas.draw()


if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    win = Window()
    win.show()
    sys.exit(app.exec_())

我可以看到我的绘图,但没有垂直线。为什么?

您的示例并不完整,但我认为您需要替换:

plt.axvline(x=4)
与:

将线添加到未显示的轴。使用
plt.
是您可能希望在GUI中避免使用的pyplot接口。因此,所有绘图都必须在轴上进行,如
ax.

  • 不同之处在于,您可以将多个位置作为列表传递给
    x
    ,而只允许一个位置。
    • 单个位置:
      x=37
    • 多个位置:
      x=[37,38,39]
  • 如果您正在使用类似于
    fig,ax=plt.subplot()
    的图形绘制,则分别将
    plt.vline
    plt.axvline
    替换为
    ax.vline
将numpy导入为np
将matplotlib.pyplot作为plt导入
xs=np.linspace(1,21200)
plt.vlines(x=[37,38,39],ymin=0,ymax=len(xs),colors='purple',ls='--',lw=2,label='vline_multiple')
plt.vlines(x=40,ymin=0,ymax=len(xs),colors='green',ls=':',lw=2,label='vline_single')
打印轴(x=36,颜色为'b',标签为'avline')
plt.legend()
plt.show()

这是否回答了您的问题?
ax.axvline(x=4)