我正在使用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
我希望网格在设定轴限制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)
是否有另一种方法可以将网格扩展到所需的轴限制?
答案 0 :(得分:1)
一个问题是histogram2d
函数如果您像使用它一样使用它来确定垃圾箱本身
这意味着在运行之前,箱子的偏移和宽度都不清楚,因为它们取决于您的随机点而不是轴限制。现在,一旦找到垃圾箱,您就可以 回读它们的形状并相应地设置轴网格。但是创建自己的垃圾箱更容易,因此您可以获得跨越整个轴范围的网格
然后,您可以将垃圾箱的边缘设置为次要刻度并在其上启用网格
使用由pcolormesh
创建的线条也可以工作,但在使用它时,您会得到一些比其他线条更粗的线条(这与像素之间的线条位置有关)。对于轴网格,这不会发生,但有些线条似乎会切断您的垃圾箱。最后,这是一个你更喜欢的味道问题。您可以随时使用edgecolor
和linewidth
,直到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)