小编The*_*ude的帖子

matplotlib.pyplot vs matplotlib.pylab

我通常使用以下包来创建我的图:matplotlib.pylab.但是,还有一个名为的包matplotlib.pyplot.

在使用它们时,我无法发现两者之间的任何差异.所以我的问题如下:

matplotlib.pylab和有什么区别matplotlib.pyplot.在哪种情况下你会建议一个在另一个?

python matplotlib

16
推荐指数
1
解决办法
5600
查看次数

使用子图时颜色条位置错误(matplotlib)

我想创建一个由九个子图组成的图形.我真的很讨厌我需要分别创建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)

python plot matplotlib colorbar subplot

8
推荐指数
2
解决办法
7137
查看次数

绘图标签中的立式 mu:保留原始刻度字体

我有一个我认为会发生更多的问题。但是,在网上搜索了一段时间后,我还没有找到解决问题的方法。所以这里是这样的:

对于使用 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 fonts matplotlib rc tex

7
推荐指数
1
解决办法
6915
查看次数

使用amsmath和sfmath进行绘图标注的Latex字体样式问题

我有一个与在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标签):

在此输入图像描述

请注意,以产生第二图像,我换sfmathamsmath.这立即弄乱了x和y-ticks.这是我不想发生的事情.

是否可以将单个字母/单词的字体样式更改为amsmath?这样我只能在指示图形的x标签时才使用该字体样式.

另一种方法是sfmathamsmathin 替换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)

python latex matplotlib tex

7
推荐指数
1
解决办法
3554
查看次数

使用numpy数组评估函数返回inf和nan

我有以下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的输出).

到底是怎么回事?

python arrays for-loop numpy

7
推荐指数
1
解决办法
826
查看次数

使图透明与彩色背景

我有点情况.我需要的是一个黑色背景的情节,在黑色背景上绘制了几个白色圆圈.

我设法使用以下代码执行此操作:

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 = Truesavefig,但实际设置的选项alpha = 0.plt.Circle.这使得白色圆圈实际上是透明的,这是最终目标.但是,因为它是透明的,所以我留下了整个黑色背景.有什么想法可以解决这个问题?

总结一下我的目标:

我想保存图中的透明版本,其中白色圆圈是透明的,而黑色部分则不是.

我知道我可以使用不同的程序,如inkscapegimp创造我想要的东西.但是,由于我需要执行其他操作,我确实需要在python中执行此操作.

谢谢!

python matplotlib

6
推荐指数
1
解决办法
2079
查看次数

在PyQtGraph中返回鼠标光标坐标

我是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)

python plot pyqt pyqtgraph

6
推荐指数
1
解决办法
5819
查看次数

快速查找二维数组中的多个最大值

情况如下:

我有一个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.我怎样才能加快速度?

非常感谢!

python arrays performance numpy max

5
推荐指数
1
解决办法
4906
查看次数

使用2D遮罩遮罩BGR图像

我有一个带有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)

python numpy image mask matplotlib

5
推荐指数
1
解决办法
5735
查看次数

使用 PyQtGraph 时如何清除“while”循环中的绘图?

我正在使用 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)

python plot memory-leaks pyqtgraph

5
推荐指数
1
解决办法
6624
查看次数

标签 统计

python ×10

matplotlib ×6

numpy ×3

plot ×3

arrays ×2

pyqtgraph ×2

tex ×2

colorbar ×1

fonts ×1

for-loop ×1

image ×1

latex ×1

mask ×1

max ×1

memory-leaks ×1

performance ×1

pyqt ×1

rc ×1

subplot ×1