如何在使用pcolormesh时设置网格

时间:2018-04-17 01:41:00

标签: python numpy matplotlib plot histogram

我正在使用range创建一个与choices = tuple(range(1, 45)) # tuple is generally the fastest structure to index results = [] for i in range(1, 7000000): a = random.sample(choices, 6) results.append(a) 重叠的网格。

random

虽然,此代码仅生成覆盖最外面的xy数据点的网格。 enter image description here

我希望网格在设定轴限制pcolormesh时保持不变。因此,网格不断覆盖绘制区域。从0,0到160,120。

我尝试在pcolormesh中使用2dhistogram函数。但这只是一个空白的数字。我虽然没有收到错误代码?

import matplotlib.pyplot as plt import numpy as np import random x = [random.randrange(1,161,1) for _ in range (10)] y = [random.randrange(1,121,1) for _ in range (10)] fig, ax = plt.subplots() ax.set_xlim(0,160) ax.set_ylim(0,120) zi, yi, xi = np.histogram2d(y, x, bins=(50,120)) zi = np.ma.masked_equal(zi, 0) ax.pcolormesh(xi, yi, zi, edgecolors='black') scat = ax.scatter(x, y, s=2)

是否有另一种方法可以将网格扩展到所需的轴限制?

1 个答案:

答案 0 :(得分:1)

一个问题是histogram2d函数如果您像使用它一样使用它来确定垃圾箱本身 这意味着在运行之前,箱子的偏移和宽度都不清楚,因为它们取决于您的随机点而不是轴限制。现在,一旦找到垃圾箱,您就可以 回读它们的形状并相应地设置轴网格。但是创建自己的垃圾箱更容易,因此您可以获得跨越整个轴范围的网格 然后,您可以将垃圾箱的边缘设置为次要刻度并在其上启用网格 使用由pcolormesh创建的线条也可以工作,但在使用它时,您会得到一些比其他线条更粗的线条(这与像素之间的线条位置有关)。对于轴网格,这不会发生,但有些线条似乎会切断您的垃圾箱。最后,这是一个你更喜欢的味道问题。您可以随时使用edgecolorlinewidth,直到pcolormesh显示出不错的结果。

import matplotlib.pyplot as plt
import numpy as np
import random

x = [random.randrange(1,161,1) for _ in range (10)]
y = [random.randrange(1,121,1) for _ in range (10)]

fig, ax = plt.subplots()

ax.set_xlim(0,160)
ax.set_ylim(0,120)

bins = [
    np.linspace(*ax.get_xlim(), 120),
    np.linspace(*ax.get_ylim(), 50)
]

# Note that I switched back to x, y and used zi.T later which I find
# more readable
zi, xi, yi = np.histogram2d(x, y, bins=bins)
zi = np.ma.masked_equal(zi, 0)

# Either use the next four lines for axis grid
ax.pcolormesh(xi, yi, zi.T)    
ax.set_xticks(bins[0], minor=True)
ax.set_yticks(bins[1], minor=True)
ax.grid(True, which='minor')

# or use the next line to stick with edges drawn by pcolormesh
# ax.pcolormesh(xi, yi, zi.T, edgecolor='black')
scat = ax.scatter(x, y, s=2)

plot created by the provided code