我目前正在制作一个情节,我将数据显示在一起。 我使用以下代码绘制它们:
plt.figure()
# Data 1
data = plt.cm.binary(data1)
data[..., 3] = 1.0 * (data1 > 0.0)
fig = plt.imshow(data, interpolation='nearest', cmap='binary', vmin=0, vmax=1, extent=(-4, 4, -4, 4))
# Plotting just the nonzero values of data2
x = numpy.linspace(-4, 4, 11)
y = numpy.linspace(-4, 4, 11)
data2_x = numpy.nonzero(data2)[0]
data2_y = numpy.nonzero(data2)[1]
pts = plt.scatter(x[data2_x], y[data2_y], marker='s', c=data2[data2_x, data2_y])
这给了我这个情节:
从图像中可以看出,我的背景和前景方块没有对齐。
两者都具有相同的尺寸(20 x 20)。我希望有一种方法,如果可能的话,将中心与中心或角落对齐,但要有某种对齐方式。
在某些网格单元格中,似乎我有正确的底角对齐,在其他网格对齐中,而在其他网格对齐方面,根本没有对齐,会降低可视化效果。
任何帮助将不胜感激。
谢谢。
答案 0 :(得分:2)
正如tcaswell
所说,通过为extent
定义imshow
关键字,您的问题可能最容易解决。
如果给出extent keyword
,最外面的像素边将位于范围内。例如:
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(np.random.random((8, 10)), extent=(2, 6, -1, 1), interpolation='nearest', aspect='auto')
现在很容易计算每个像素的中心。在X方向:
同样,Y中心位于-875 + n * 0.25。
因此,通过调整extent
,您可以在任意位置获取像素中心。
20x20数据的示例:
import matplotlib.pyplot as plt
import numpy
# create the data to be shown with "scatter"
yvec, xvec = np.meshgrid(np.linspace(-4.75, 4.75, 20), np.linspace(-4.75, 4.75, 20))
sc_data = random.random((20,20))
# create the data to be shown with "imshow" (20 pixels)
im_data = random.random((20,20))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.imshow(im_data, extent=[-5,5,-5,5], interpolation='nearest', cmap=plt.cm.gray)
ax.scatter(xvec, yvec, 100*sc_data)
请注意,这里两个scatter
的像素间距离相同(如果您查看xvec
,所有像素相距0.5个单位)和imshow
(作为图像从-5拉伸到+5并且有20个像素,像素相距0.5个单位。)
答案 1 :(得分:1)
这是一个没有对齐问题的代码。
import matplotlib.pyplot as plt
import numpy
data1 = numpy.random.rand(10, 10)
data2 = numpy.random.rand(10, 10)
data2[data2 < 0.4] = 0.0
plt.figure()
# Plotting data1
fig = plt.imshow(data1, interpolation='nearest', cmap='binary', vmin=0.0, vmax=1.0)
# Plotting data2
data2_x = numpy.nonzero(data2)[0]
data2_y = numpy.nonzero(data2)[1]
pts = plt.scatter(data2_x, data2_y, marker='s', c=data2[data2_x, data2_y])
plt.show()
给出了完美对齐的组合图:
因此,在代码中使用其他选项可能是组合图未对齐的原因。