Q:

Matplotlib | Change in plot representation when applying logarithmic scale

Given a set of points to be represented on a 3D plot (as scatter plot) I thought it would be interesting to plot the same data in 2D instead of 3D thanks to hist2d and using weights.
This data has low and high values (some orders of magnitud apart) so when represented as a hist2d plot some data is "lost" (mainly the lower points).
In order to get a better idea of all the values, I represented the same plot in logarithmic scale. As a result, I noticed two different things. First, all points apart from those included in the data being represented, appear as white pixels (it looks like in logarithmic scale all those points are ignored) instead of coloured as the lowest points (see also the lowest part of the colorband, it is white instead of blue). Secondly, and not so important, the values of the scale in the colorband are represented as powers of 10.
So my question involves those two points, how can all that "white" area be represented in blue, that is, in the colour of the lowest points and how can the colorband be tweaked in order to not show powers of 10 and instead represent the numbers as normal (1, 10, 100...)?
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

# Data
x = [8 for i in range(65)]
y = [75, 74, 73, 72, 71, 70, 69, 68, 67, 66, 65, 64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, 48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, 32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11]
z = [895, 800, 710, 635, 565, 500, 440, 392, 347, 304, 268, 235, 205, 179, 156, 135, 117, 101, 89, 76, 64, 55, 47, 40, 34, 29, 25, 20, 16, 14, 12, 9, 7, 6, 5, 4, 3, 2.5, 2, 1.7, 1.3, 1, 0.775, 0.60, 0.45, 0.35, 0.25, 0.18, 0.14, 0.10, 0.07, 0.05, 0.035, 0.025, 0.020, 0.015, 0.010, 0.007, 0.006, 0.005, 0.005, 0.005, 0.005, 0.005, 0.005]

fig = plt.figure()

# First plot
fig.add_subplot(211)

plt.hist2d(x, y, weights=z, bins=len(x), cmap='plasma')
cb = plt.colorbar(extend='both')
cb.set_label('height')

# Second plot. Using log scale
fig.add_subplot(212)

plt.hist2d(x, y, weights=z, bins=len(x), norm=mpl.colors.LogNorm(vmin=min(z), vmax=max(z)), cmap='plasma')
cb = plt.colorbar(extend='both')
cb.set_label('height')

plt.show()

A:

(I suppose all the x-values are 8, in order to create a minimal example.)
The white "color" is because the log of zero is NaN or minus infinity, so no color (showing the background). To change that background color to the 0-value of the 'plasma' color map:
plt.gca().set_facecolor(plt.get_cmap('plasma')(0))

To avoid the scientific notation, and to only have the ticks larger than 1, you can change the ticks and the tick format of the colorbar.
Because the minimum of z is zero, you loose a lot of color space between 0 and 1. Setting the vmin to 1 (or to 0.99) avoids that.
from matplotlib import ticker

fig.add_subplot(212)
plt.gca().set_facecolor(plt.get_cmap('plasma')(0))
plt.hist2d(x, y, weights=z, bins=len(x), norm=mpl.colors.LogNorm(vmin=1, vmax=max(z)), cmap='plasma')
cb = plt.colorbar(extend='both')
cb.set_label('height')
cb.set_ticks([1, 10, 100] + list(range(500, max(z), 500))) 
cb.ax.yaxis.set_major_formatter(ticker.ScalarFormatter()) # remove the scientific notation
cb.ax.yaxis.set_minor_locator(ticker.NullLocator()) # optionally remove the minor ticks

