用Matplotlib画一条垂直线

Phi*_*hel 3 qt 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__(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_())
Run Code Online (Sandbox Code Playgroud)

我可以看到我的情节,但没有垂直线.为什么?

最好的祝福,

菲利普

tob*_*n9e 5

你的例子不是自包含的,但我认为你需要替换:

plt.axvline(x=4)
Run Code Online (Sandbox Code Playgroud)

有:

ax.axvline(x=4)
Run Code Online (Sandbox Code Playgroud)

您正在将线添加到未显示的轴.使用plt.是您可能希望避免GUI的pyplot接口.所以你所有的绘图都必须像轴一样ax.


Tre*_*ney 5

matplotlib.pyplot.vlines

  • 区别在于您可以将多个位置作为x列表传递,而matplotlib.pyplot.axvline只允许一个位置。
    • 单一地点:x=37
    • 多个地点:x=[37, 38, 39]
  • 如果您使用类似 的内容绘制图形fig, ax = plt.subplots(),则分别将plt.vlines或替换plt.axvlineax.vlinesax.axvline
import numpy as np
import matplotlib.pyplot as plt

xs = np.linspace(1, 21, 200)
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')
plt.axvline(x=36, color='b', label='avline')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述