簡體   English   中英

在Python中繪制更平滑的分叉圖

[英]Plot smoother bifurcation diagrams in Python

我正在使用matplotlib.scatter繪制系統的分叉圖,該系統通過周期性倍增的路徑陷入混亂。 使用可以在此處找到的數據,我使用以下命令:

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()

我得到以下圖:

在此處輸入圖片說明

但是,您可以看到線條不平滑。 即使存在這些分歧,是否有辦法插值此類數據,而不是一一對應?

當繪制每個數據點大小恰好一個像素時,您將獲得最准確的數據表示。

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()

在此處輸入圖片說明

但是,這看起來一點也不流暢。 通過選擇較大的標記大小,然后增加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()

在此處輸入圖片說明

在此處輸入圖片說明

由於您的數據點是有序的且間隔很近,因此您要做的就是在連續的數據點之間進行線性插值。 另外,保存數字時我會增加DPI。

例如:

import numpy as np
import matplotlib.pyplot as plt

p, b = np.loadtxt('data.dat')

def upsample_linearly(x, upsample_by):
    dx = np.diff(x)
    xx = [x[:-1] + fraction * dx for fraction in np.linspace(0., 1., upsample_by)]
    xx = np.transpose(xx).ravel()
    return xx

upsampled_p = upsample_linearly(p, 5)
upsampled_b = upsample_linearly(b, 5)

fig, ax = plt.subplots(1,1)
ax.scatter(upsampled_p, upsampled_b, s=0.1, marker=".")
ax.set_xlim([2.35, 2.6])

fig.savefig('./bifurcation.png', dpi=1000)
plt.show()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM