With or without exact zeros a histogram of a very skew distribution can look like this. It has nothing to do with the spread, nor with the existence of zeros, but with how far above the bulk of the data the largest observation is.
You're dealing with two different problems at once here --
$\:$ a. The distribution is very skew.
$\:$ b. The default number of bins in R is a good deal too low for seeing the shape well in general and much too low when the distribution is skew or has heavy tails.
The second problem is easy to deal with -- use far more bins.
Obtaining a good display with very skewed data is not a single step process. It may take several attempts and some decision-making about how to best represent the information
If the data were actually lognormal with a large $\sigma$ parameter (and so very skew), it can look just like your plot. Here I generated some data (in "x", with n=1800) which has a particular lognormal distribution:
I made that plot have about twice as many bins that you got from the default, but it still didn't show any detail. How skewed is this? Well, the sample mean is about 8000 times as big as the median. Those large values dominate more than just the plot. (I made a second data set that's somewhat less skew, to show
the potential value of some of the options I suggest)
The most obvious thing to do would be to plot on a log scale:
Note that the axis labels are in original values not log-currency, just as you'd get with
plot(...,log="x") (in fact that's what I used to make this plot, after extracting the results of
hist by putting it into a variable); I also added some detail on the x-axis but this isn't really necessary.
If you have exact zeros this approach of plotting on a log-scale is obviously not suitable for them as-is, since you can't take log of exact 0's (which are impossible in a lognormal; clearly you don't a lognormal).
How you might deal with them depends on what you're trying to do with the variable and how many there are.
(What's the actual proportion of exact zeros? You didn't say)
Anyway, here's the simplest step in the process of trying to find a suitable display:
try a histogram with a lot of bins - at least a hundred. And plot in a bigger window.
This can sometimes help a lot but if your data is pretty skew, it won't solve the problem:
That may not work (it didn't for my most skewed sample there), so what else is there?
Cut off the largest values and list them on the plot, or do two displays, one with the top end cut off and one showing the larger values (equivalently, on one display, show a complete scale break and plot the two parts on two different x-scales). Something a bit like this:
This can often help a lot but if your data is really skewed, it won't solve the problem:
This is about the best plot possible with that data -- you really can't get
more detail on the right without losing it all on the left.
cut off the exact zeros, show a count of them and plot on the log-scale (but with original currency-scale tick-labels) as in my second diagram above
Consider a transformation that can manage zeros, such as cube-root, but still show currency on the axis. (This would
involve writing some R-code, so it may be too hard for you at this point. I don't really suggest it in this case, since people are much more used to seeing
financial variables like income either on the log-scale, or on the original currency-scale.)
Since someone is bound to ask, here's how I did the log-scale plot (absent additional fiddling with axis ticks):
res <- hist(log(x),n=30)
lwd wide enough that the bars just touch. You need
lend to make the cars have square ends. You can make a version of "hist" to do this but it takes more work.)