我通常使用以下包来创建我的图:matplotlib.pylab.但是,还有一个名为的包matplotlib.pyplot.
在使用它们时,我无法发现两者之间的任何差异.所以我的问题如下:
包matplotlib.pylab和有什么区别matplotlib.pyplot.在哪种情况下你会建议一个在另一个?
我想创建一个由九个子图组成的图形.我真的很讨厌我需要分别创建ax1到ax9的事实所以我创建了一个for循环来这样做.但是,当我想要包含一个颜色条时,颜色条位于最后一个子图的右侧.这也在下图中说明:

出了什么问题,我该如何解决这个问题?
已使用以下代码生成图像:
import numpy
import layout
import matplotlib.pylab as plt
data = numpy.random.random((10, 10))
test = ["ax1", "ax2", "ax3", "ax4", "ax5", "ax6", "ax7", "ax8", "ax9"]
fig = plt.figure(1)
for idx in range(len(test)):
vars()[test[idx]] = fig.add_subplot(3, 3, (idx + 1))
im = ax1.imshow(data)
plt.colorbar(im)
im2 = ax3.imshow(data)
plt.colorbar(im2)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有一个我认为会发生更多的问题。但是,在网上搜索了一段时间后,我还没有找到解决问题的方法。所以这里是这样的:
对于使用 matplotlib.pyplot 创建的图,我想将 SI 单位微米合并到我的 xlabel 中。然而单位微米需要是直立的。经过一番摆弄之后,我获得了所需的 xlabel。
我必须生成的代码是:
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc('text', usetex = True)
params = {'text.latex.preamble': [r'\usepackage{siunitx}', r'\usepackage{cmbright}']}
plt.rcParams.update(params)
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
ax.set_xlabel('$\si{\micro \meter}$', fontsize = 16)
ax.set_ylabel("hi", fontsize = 16)
plt.savefig("test.png")
Run Code Online (Sandbox Code Playgroud)
结果如下所示:
千分尺正是我想要的。然而,问题是 x 和 y 刻度的字体被改变了。这是因为:
matplotlib.rc('text', usetex = True)
Run Code Online (Sandbox Code Playgroud)
如何将字体值重置为其原始值?或者如何确保在引入 tex 时字体不会改变?
作为参考,我所指的原始值如下所示:
除了尝试将字体恢复为其原始值之外,我还尝试了将微米合并到我的 xlabel 中的不同方法。这里出现的问题是它仍然是斜体或者它有一个粗体设置。我正在寻找的千分尺是第一个图中给出的那个。
我希望有人能帮我解决这个问题。
提前谢谢
我有一个与在python中使用TeX相关的问题.
我启用了以下包:
import numpy
import matplotlib
import matplotlib.pyplot as plt
matplotlib.rc('text', usetex = True)
matplotlib.rc('font', **{'family' : "sans-serif"})
params = {'text.latex.preamble' : [r'\usepackage{siunitx}', r'\usepackage{sfmath}']}
plt.rcParams.update(params)
Run Code Online (Sandbox Code Playgroud)
可以在我之前的一个问题中查找原因.
但是,我现在也可以使用amsmath包的字体.当我将它包含在params中时,它没有响应.我需要amsmath的是用"a"标记图的x轴.
所以告诉你我有什么:

和我想要的(关于x标签):

请注意,以产生第二图像,我换sfmath到amsmath.这立即弄乱了x和y-ticks.这是我不想发生的事情.
是否可以将单个字母/单词的字体样式更改为amsmath?这样我只能在指示图形的x标签时才使用该字体样式.
另一种方法是sfmath用amsmathin 替换params并确保刻度看起来像第一个图像.
谢谢
在旁注中,数字是使用以下方式创建的:
fig = plt.figure()
ax1 = fig.add_subplot(1, 1, 1)
ax1.set_xlabel(r"$a$", fontsize = 14)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我有以下numpy数组和函数:
import numpy
import scipy.special
i = numpy.linspace(0, 500, 501, dtype = int)
def func(x, n):
return scipy.special.eval_hermite(n, x)
Run Code Online (Sandbox Code Playgroud)
我i使用两个不同的appraoches 评估我的numpy数组中每个元素的函数:
方法1:
hermites = func(0, i)
Run Code Online (Sandbox Code Playgroud)
方法2:
hermites = [func(0, idx) for idx in i]
Run Code Online (Sandbox Code Playgroud)
这两种方法产生两种不同的答案.它们是不同的,因为在元素之后50,方法1开始返回inf并且nan.方法2也没有给出每个元素的正确值i.但是,它能够计算更多.方法2失败了i >= 64.
两种方法在大约相同的时间给出了答案(0.7秒len(i) = 15000,确定使用timeit).我不明白的是不同的结果.这是因为我学会了尽可能避免for loops在python中.这次似乎不是这种情况.
它与记忆有关的想法也让我想到了.但是,评估一个单一元素,即print func(0, 64)也返回0.(等于方法2的输出).
到底是怎么回事?
我有点情况.我需要的是一个黑色背景的情节,在黑色背景上绘制了几个白色圆圈.
我设法使用以下代码执行此操作:
import numpy
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, aspect = "equal", axisbg = "black")
ax.add_artist(plt.Circle((0., 0., .5), color = "white"))
plt.xlim(-5, 5)
plt.ylim(-5, 5)
fig.savefig("test.png", dpi = 300)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这会产生以下结果:

现在,我想做的是使这个图像透明.所以这意味着只有白圈应该变得透明.您可能已经能够看到问题,因为我会设置transparent = True.黑色背景自动变得透明,我的身材会失去黑色.
我想另一件事是没有设置transparent = True的savefig,但实际设置的选项alpha = 0.中plt.Circle.这使得白色圆圈实际上是透明的,这是最终目标.但是,因为它是透明的,所以我留下了整个黑色背景.有什么想法可以解决这个问题?
总结一下我的目标:
我想保存图中的透明版本,其中白色圆圈是透明的,而黑色部分则不是.
我知道我可以使用不同的程序,如inkscape和gimp创造我想要的东西.但是,由于我需要执行其他操作,我确实需要在python中执行此操作.
谢谢!
我是PyQtGraph的新手,想要用它来快速可视化我的数据采集.以前我使用的是matplotlib,重绘图形是我的瓶颈.在转换到PyQtGraph之后,我目前只缺少matplotlib的一个功能.即,返回鼠标光标的x和y坐标.
如何在使用PyQtGraph绘制的图中调用/模仿鼠标光标的x坐标和y坐标的返回?
编辑! - 在实现leongold的提示后,代码能够返回鼠标位置而不会失去速度.代码如下:
import numpy
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
def gaussian(A, B, x):
return A * numpy.exp(-(x/(2. * B))**2.)
def mouseMoved(evt):
mousePoint = p.vb.mapSceneToView(evt[0])
label.setText("<span style='font-size: 14pt; color: white'> x = %0.2f, <span style='color: white'> y = %0.2f</span>" % (mousePoint.x(), mousePoint.y()))
# Initial data frame
x = numpy.linspace(-5., 5., 10000)
y = gaussian(5., 0.2, x)
# Generate layout
win = pg.GraphicsWindow()
label = pg.LabelItem(justify = "right")
win.addItem(label)
p = win.addPlot(row = 1, col …Run Code Online (Sandbox Code Playgroud) 情况如下:
我有一个2D numpy数组.它的形状是(1002,1004).每个元素包含0到Inf之间的值.我现在要做的是确定前1000个最大值并将相应的索引存储到名为x的列表和名为y的列表中.这是因为我想绘制最大值,而索引实际上对应于值的实时x和y位置.
到目前为止我所拥有的是:
x = numpy.zeros(500)
y = numpy.zeros(500)
for idx in range(500):
x[idx] = numpy.unravel_index(full.argmax(), full.shape)[0]
y[idx] = numpy.unravel_index(full.argmax(), full.shape)[1]
full[full == full.max()] = 0.
print os.times()
Run Code Online (Sandbox Code Playgroud)
这里是我的2D numpy数组.从for循环可以看出,我现在只确定前500个最大值.然而,这已经需要大约5秒.对于前1000个最大值,用户时间实际上应该在0.5秒左右.我注意到一个非常耗时的部分是每次将之前的最大值设置为0.我怎样才能加快速度?
非常感谢!
我有一个带有shape的三维数组(图像)(480, 640, 3)。在此,3是指BGR颜色代码。我想使用红色图像数组中的数据在此图像上放置遮罩。根据其值,某些像素需要被遮罩。
创建遮罩效果很好。它的行为完全符合预期。为了将蒙版应用于原始图像,我首先将蒙版应用于蓝色和绿色图像。一切还好。现在,我将三个蒙版数组堆叠在一起,这将返回一个带有shape的数组(480, 640, 3)。但是,使用此阵列绘制imshow结果会得到原始图像。没有任何面具的迹象。
下面我放我的代码。该代码适用于任何图像尺寸/形状。您需要做的就是将名称更改为"Whatever_image_you_like.png"PC上任何图像的名称。
import numpy
import numpy.ma
import scipy.misc
import matplotlib.pyplot as plt
pixel_value = 130 #Value in range 0 to 255
image = scipy.misc.imread("Whatever_image_you_like.png")
#Extract Blue, Green, and Red image from original image
image_B = numpy.copy(image[:, :, 0])
image_G = numpy.copy(image[:, :, 1])
image_R = numpy.copy(image[:, :, 2])
#Define mask depending on pixel value in Red image
image_mask = numpy.empty([image.shape[0], image.shape[1]], dtype = bool)
image_mask[image_R …Run Code Online (Sandbox Code Playgroud) 我正在使用 PyQtGraph 来快速可视化我的数据采集。为此,我不断地使用while循环重绘数据。此代码的简化版本如下:
import time
import numpy
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
x = numpy.linspace(-2 * numpy.pi, 2 * numpy.pi, 1000)
y = numpy.cos(x)
# Plot
win = pg.GraphicsWindow()
win.resize(800, 800)
p = win.addPlot()
p.plot(x, y, pen = "y")
i = 0
while i < 5000:
start_time = time.time()
noise = numpy.random.normal(0, 1, len(y))
y_new = y + noise
p.plot(x, y_new, pen = "y", clear = True)
p.enableAutoRange("xy", False)
pg.QtGui.QApplication.processEvents()
i += 1
end_time …Run Code Online (Sandbox Code Playgroud)