English: Produced by the following code adapted from code from Wikipedia article Logistic map:
import numpy as np
import matplotlib.pyplot as plt
preset = 3
saveFigure = True
markerSize = 0.001
markerStyle = "," # . - point; , - pixel
progressReportBlockLen = 1000
if preset == 1: # Complete diagram on the conventional range
rInterval = (-0.1, 4.1)
rResolution = 0.0005
mapIterationCount = 1000
lastMapIterationCountToPlot = 1000
startingIterationValue = 0.5
yLim = (-0.1, 1.1)
fileName = "LogisticMapOrbitDiag.png"
if preset == 2: # Complete diagram, including the negative r
rInterval = (-2.1, 4.1)
rResolution = 0.0005
mapIterationCount = 1000
lastMapIterationCountToPlot = 1000
startingIterationValue = 0.5
yLim = (-0.6, 1.6)
fileName = "LogisticMapOrbitDiag_InclNegR.png"
if preset == 3: # Zoom on the leftmost bifurcation region
rInterval = (3.54, 3.5705) #3.571
rResolution = 0.000004
mapIterationCount = 500 #1000
lastMapIterationCountToPlot = 500
startingIterationValue = 0.5
yLim = (0.33, 0.9)
fileName = "LogisticMapOrbitDiag_BifurcZoom.png"
if preset == 4: # Complete diagram on the conventional range, skip early iterates
rInterval = (-0.1, 4.1)
rResolution = 0.0005
mapIterationCount = 10000
lastMapIterationCountToPlot = 1000
startingIterationValue = 0.5
yLim = (-0.1, 1.1)
fileName = "LogisticMapOrbitDiag_SkipEarlyIter.png"
progressReportBlockLen = 100
lims = np.zeros(mapIterationCount)
fig, biax = plt.subplots()
fig.set_size_inches(16, 9)
itemCount = 0
for r in np.arange(rInterval[0], rInterval[1], rResolution):
itemCount += 1
lims[0] = startingIterationValue
for i in xrange(mapIterationCount - 1):
lims[i + 1] = r * lims[i] * (1 - lims[i])
if itemCount % progressReportBlockLen == 0:
print("Parameter values processed:", itemCount)
biax.plot([r] * lastMapIterationCountToPlot,
lims[(mapIterationCount - lastMapIterationCountToPlot):], "b.",
markersize=markerSize,
marker=markerStyle)
biax.set(xlabel="c", ylabel="x",
title="Logistic map - r * x (1 - x) - bifurcation diagram/orbit diagram" + "\n"
"r resolution: " + str(rResolution) +
", iteration count: " + str(mapIterationCount) +
", last values to plot count: " + str(lastMapIterationCountToPlot))
biax.set_ylim(yLim[0], yLim[1])
if saveFigure:
plt.savefig(fileName, dpi=600)
else:
plt.show()