使用 matplotlib 绘制素数计数步骤函数

问题描述 投票:0回答:1

我正在尝试复制计算素数的步骤函数,如此处所示。

我试过这个代码

mylist = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30]plt.gca().set_aspect("equal")

plt.autoscale(False)
plt.xlim(0, 31)
plt.ylim(0, 15)
y=0
for p in mylist:
    if sympy.isprime(p)==2:
        plt.plot(1,0)
    if sympy.isprime(p):
        x=p-1
        y=y+1
        #print(x,y)
        plt.plot(x,y, marker='.')
    else:
        x=p-1
        #print(x,y)
        plt.plot(x,y, marker='.')
        
plt.show()       

但它至少在两个方面失败了:

(1) 我无法使非素数比素数高 1 个单位。我的向右移动。

(2) 正如在参考图中,x 轴应继续为 1,2,3,4,5…,并且绘制的每个数字将位于相应数字的上方。在我的代码中,x 轴不正确。

您能给我一些关于如何解决这个问题的提示吗?我刚刚开始学习 matplotlib。

我查看了step函数,但我认为它在这种情况下不起作用。谢谢。

matplotlib plot
1个回答
0
投票

我会

filter
质数(来自
range
),然后再将它们传递给
step

from sympy import isprime
import numpy as np

N = 30

xs = list(range(N+1))
prime_xs = list(filter(isprime, xs))

ax = plt.subplot()
ax.step(prime_xs, range(len(prime_xs)))
ax.set_xticks(xs)

输出:

© www.soinside.com 2019 - 2024. All rights reserved.