Question

I used the information from this post to create a histogram with logarithmic scale: Histogram with Logarithmic Scale

However, the output from plot looks nothing like the output from hist. Does anyone know how to configure the output from plot to resemble the output from hist? Thanks for the help.

Was it helpful?

Solution

A simplified, reproducible version of the linked answer is

x <- rlnorm(1000)
hx <- hist(x, plot=FALSE)
plot(hx$counts, type="h", log="y", lwd=10, lend="square")

To get the axes looking more "hist-like", replace the last line with

plot(hx$counts, type="h", log="y", lwd=10, lend="square", axes = FALSE)
Axis(side=1)
Axis(side=2)

Getting the bars to join up is going to be a nightmare using this method. I suggest using trial and error with values of lwd (in this example, 34 is somewhere close to looking right), or learning to use lattice or ggplot.


EDIT: You can't set a border colour, because the bars aren't really rectangles – they are just fat lines. We can fake the border effect by drawing slightly thinner lines over the top. The updated code is

par(lend="square")
bordercol <- "blue"
fillcol <- "pink"
linewidth <- 24
plot(hx$counts, type="h", log="y", lwd=linewidth, col=bordercol, axes = FALSE)
lines(hx$counts, type="h", lwd=linewidth-2, col=fillcol)
Axis(side=1)
Axis(side=2)

OTHER TIPS

How about using ggplot2?

x <- rnorm(1000)
qplot(x) + scale_y_log10()

But I agree with Hadley's comment on the other post that having a histogram with a log scale seems weird to me =).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top