如何使用OOAPI使用寄生虫轴(嵌入PyQt4中的图),我完全被难住了。我想根据下面的代码绘制与绘图的轴偏移。但是,在PyQt4中html" target="_blank">嵌入matplotlib时,不能使用pyplot或host_子Plot。
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
import matplotlib.pyplot as plt
host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(right=0.75)
par1 = host.twinx()
par2 = host.twinx()
offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
axes=par2,
offset=(offset, 0))
par2.axis["right"].toggle(all=True)
host.set_xlim(0, 2)
host.set_ylim(0, 2)
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")
p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")
par1.set_ylim(0, 4)
par2.set_ylim(1, 65)
plt.draw()
plt.show()
我确实设法通过创建两个图形来绘制偏移轴,并根据这里的问题链接它们的轴:
matplotlib显示一个轴,没有数据
这是我的首选方法,因为它允许我在图形之间放一个QSplitter,但是我不能让上面的图形只显示X轴——一些图形图形和它的数据总是显示,不管我把y轴设置得有多小是。
然后,我尝试在一个单独的QWidget中绘制我自己的偏移轴,通过获得绘图轴几何形状:
ax = foo.figure.add_subplot(1,1,1)
lineGeometry = [ax.bbox.x0, etc.]
然后使用轴几何形状绘制Qt线。QPainter()相同的开始/结束位置,但在单独的QWidget中偏离了情节。这有点笨拙,我更喜欢更简单的方法。
任何使用嵌入Qt4的寄生轴的帮助都将不胜感激。
感谢我在上面提到的上一篇文章中的评论,我设法解决了你可以在PyQt4中使用matplotlib.pyplot,但是使用qt4后端进行显示。下面是一个冗长的(道歉)例子。代码有一个错误,尽管两个图似乎都在互相绘制,不确定发生了什么:
import sys
from PyQt4 import QtGui, QtCore
import numpy as np
import matplotlib
from matplotlib.patches import Circle
from matplotlib.collections import PatchCollection
import matplotlib.pyplot as plt
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from mpl_toolkits.axes_grid1 import host_subplot
import mpl_toolkits.axisartist as AA
from matplotlib.figure import Figure
class ApplicationWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.main_widget = QtGui.QWidget(self)
l = QtGui.QVBoxLayout(self.main_widget)
dc = PyPlotCanvas(self.main_widget, width=5, height=4, dpi=100)
ac = AxisArtistOO(self.main_widget, width=5, height=4, dpi=100)
l.addWidget(dc)
l.addWidget(ac)
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
class PyPlotCanvas(FigureCanvas):
"""Matplotlib pyplot as FigureCanvas"""
def __init__(self, parent=None, width=5, height=4, dpi=100):
self.fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = self.fig.add_subplot(111)
self.compute_initial_figure()
FigureCanvas.__init__(self, self.fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
fig, ax = plt.subplots()
N = 3
x = np.random.rand(N)
y = np.random.rand(N)
radii = 0.1*np.random.rand(N)
patches = []
for x1,y1,r in zip(x, y, radii):
circle = Circle((x1,y1), r)
patches.append(circle)
colors = 100*np.random.rand(len(patches))
p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4)
p.set_array(np.array(colors))
ax.add_collection(p)
plt.colorbar(p)
self.fig = fig
class AxisArtistOO(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
self.fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = self.fig.add_subplot(111)
self.compute_initial_figure()
FigureCanvas.__init__(self, self.fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,
QtGui.QSizePolicy.Expanding,
QtGui.QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
def compute_initial_figure(self):
host = host_subplot(111, axes_class=AA.Axes)
plt.subplots_adjust(right=0.75)
par1 = host.twinx()
par2 = host.twinx()
offset = 60
new_fixed_axis = par2.get_grid_helper().new_fixed_axis
par2.axis["right"] = new_fixed_axis(loc="right",
axes=par2,
offset=(offset, 0))
par2.axis["right"].toggle(all=True)
host.set_xlim(0, 2)
host.set_ylim(0, 2)
par1.set_ylabel("Temperature")
par2.set_ylabel("Velocity")
p2, = par1.plot([0, 1, 2], [0, 3, 2], label="Temperature")
p3, = par2.plot([0, 1, 2], [50, 30, 15], label="Velocity")
par1.set_ylim(0, 4)
par2.set_ylim(1, 65)
fig, ax = plt.subplots()
self.fig = fig
qApp = QtGui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.show()
sys.exit(qApp.exec_())
问题内容: 我正在尝试为一些数据生成热图,我的代码如下所示: 它生成图像 我也想在网格内显示值。有什么办法吗? 问题答案: 当然,只需执行以下操作: 但是,标签很难看到,因此您可能需要在它们周围放置一个框: 另外,在许多情况下,这样做更为有用。它在放置文本方面更加灵活,但也更加复杂。在这里看看示例:http : //matplotlib.org/users/annotations_guide.ht
问题内容: 同时绘制两个图形时出现了一些麻烦,没有在一个图中显示。但是根据文档,我编写了代码,只有图1所示。我想也许我失去了一些重要的东西。有人可以帮我弄清楚吗?谢谢。(代码中使用的 tlist_first 是数据列表。) 问题答案: 除了在脚本末尾调用之外,还可以分别控制每个图形,分别执行以下操作: 在这种情况下,您必须打电话保持数字有效。这样,您可以动态选择要显示的数字 注意:在Python
问题内容: 我正在尝试使用 matplotlib.pyplot.imshow() 显示灰度图像。我的问题是灰度图像显示为颜色图。我需要灰度,因为我想在图像上绘制颜色。 我读入图像并使用 PIL的Image.open()。convert(“ L”)* 转换为灰度 * 然后,我将图像转换为矩阵,以便可以轻松地使用 但是,当我这样做 它使用颜色图显示图像(即不是灰度)。 我在这里做错了什么? 问题答案:
#include <stdio.h> void fun1(void) { int i = 0; i++; i = i * 2; printf("%d\n", i); } void fun2(void) { int j = 0; fun1(); j++; j = j
问题内容: 我在脚本中生成matplotlib图形,无论是否使用图形显示,都可以运行该脚本。我希望脚本自动调整:在显示的情况下,它应该以交互方式显示图形,而在没有显示的情况下,应将它们保存到文件中。 从对在不运行X服务器的情况下生成matplotlib图的问题的回答中,我了解到可以使用Agg后端进行非交互式绘图。 所以我正在尝试这段代码: 与带显示器的情况相同。但是,没有显示,由于已选择显示,因此
主要内容:Matplotlib中文乱码,重写配置文件,修改配置文件Matplotlib 默认不支持中文字体,这因为 Matplotlib 只支持 ASCII 字符,但中文标注更加符合中国人的阅读习惯。因此,本节重点讲解如何在 Windows 环境下让 Matplotlib 显示中文。 Matplotlib中文乱码 当不对 Matplotlib 进行设置,而直接使用中文时,绘制的图像会出现中文乱码。下面是一个含有中文乱码的折线图: 从上图可以看出,本应该显示在红框