如何用R代码按X轴区间为单条曲线设置不同颜色(无需拆分函数)
Got it, I totally get why you don't want to split your function—especially for something like a Feigenbaum plot, where breaking apart the function would be a major headache. Here's a straightforward method that keeps your original function intact while adding multi-color sections:
Core Approach: Use curve() Twice with add = TRUE
Instead of modifying your function, we'll plot each colored segment separately, overlaying them to look like a single curve. This works perfectly for any function, even complex iterative ones like those used in Feigenbaum plots.
Example with Your Quadratic Function
First, define your function as normal:
fun <- function(x) x^2
Then plot the first segment (x ∈ (-1, 0)) in blue:
curve(fun, xlim = c(-1, 0), col = "blue", ylab = "y", xlab = "x", lwd = 2)
Next, overlay the second segment (x ∈ (0, 1)) in red using add = TRUE:
curve(fun, xlim = c(0, 1), col = "red", add = TRUE, lwd = 2)
Adapting to Feigenbaum Plots
For a Feigenbaum plot (where you're typically plotting bifurcation points across a range of parameter values, e.g., r), the logic stays the same. Suppose your Feigenbaum function is defined as:
feigenbaum <- function(r) { # Your iterative logic here (e.g., logistic map iterations) x <- 0.5 for (i in 1:1000) x <- r * x * (1 - x) return(x) }
You could split the r range into colored sections like this:
# Plot r from 2 to 3 in blue curve(feigenbaum, xlim = c(2, 3), col = "blue", ylab = "x", xlab = "r", lwd = 1) # Overlay r from 3 to 4 in red curve(feigenbaum, xlim = c(3, 4), col = "red", add = TRUE, lwd = 1)
This way, you never have to alter your core function—you just plot different parameter ranges with distinct colors.
Bonus: Smooth Transitions at the Split Point
If you notice a tiny gap at x=0 (or your split point), just adjust the xlim slightly to overlap, e.g., use xlim = c(-1, 0.001) for the first segment and xlim = c(-0.001, 1) for the second. This ensures the segments connect seamlessly.
Hope this works for your use case—feel free to tweak the color codes, line widths, or ranges to match your needs!
内容的提问来源于stack exchange,提问作者fghjk

