在Python中绘制更平滑的分叉图

时间:2018-11-12 16:30:40

标签: python numpy matplotlib plot scatter

我正在使用matplotlib.scatter绘制系统的分叉图,该系统经过周期性倍增的路径而变得混乱。使用可以找到的here数据,我使用以下命令:

import numpy as np
import matplotlib.pyplot as plt
p_chi0,b_chi0=np.loadtxt('data.dat')
plt.scatter(p_chi0,b_chi0,s=0.2,marker=".")
plt.xlim([2.35,2.6])
plt.show()

我得到以下图:

enter image description here

但是,您可以看到线条不平滑。即使存在这些分歧,也有办法插值这类数据,而不是一一对应吗?

2 个答案:

答案 0 :(得分:2)

在将每个数据点绘制为一个像素大小时,您将获得最最准确的数据表示形式。

import numpy as np
import matplotlib.pyplot as plt

p, b = np.loadtxt('data/bifurcation.txt')

fig, ax = plt.subplots(figsize=(8,6), dpi=100)

# Plot one pixel sizes markers
ax.plot(p,b, ls="", marker=",")
# or with scatter.
#ax.scatter(p,b, s=(72./fig.dpi)**2, marker='o', lw=0,)

ax.set_xlim([2.35, 2.6])
fig.savefig('bifurcation.png')
plt.show()

enter image description here

但是,这看起来一点也不流畅。通过选择较大的标记大小,然后增加dpi和图形大小,您将获得平滑表示。然后将图像重新采样到原始尺寸将使结果看起来更平滑。

由于基于Agg的后端在标记标记时不准确,因此使用基于Cairo的后端也将是有益的。

import matplotlib
matplotlib.use("Qt5Cairo")
import numpy as np
import matplotlib.pyplot as plt

p, b = np.loadtxt('data/bifurcation.txt')

fig, ax = plt.subplots(figsize=(8,6), dpi=300)

ax.scatter(p,b, s=(2*72./fig.dpi)**2, marker='o', lw=0)

ax.set_xlim([2.35, 2.6])
fig.savefig('bifurcation.png')
plt.show()

enter image description here

答案 1 :(得分:0)

enter image description here

由于数据点是有序且紧密排列的,因此您要做的就是在连续的数据点之间线性插值。 另外,保存数字时我会增加DPI。

例如:

'rxjs/operators'