Issue 1:
Bug report

Bug summary

When trying to pass a pandas.Sequence to matplotlib.colors.LogNorm to set the norm of a LineCollection I expect it to handle it similar to matplotlib.colors.Normalize. However the LineCollection is not properly set.

This might also be an issue with using LineCollection.set_array() but in any case I would expect both Normalize and LogNorm to handle this similarly.

Code for reproduction

import numpy as np
import pandas as pd
from matplotlib.colors import LogNorm, Normalize
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt
x=np.arange(1, 11)
y=np.arange(1, 11)
z=pd.Series(np.logspace(-5.0, 9, num=10))

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

norms = [plt.Normalize(vmin=z.min(), vmax=z.max()),
LogNorm(vmin=z.min(), vmax=z.max()),
Normalize(vmin=z.min(), vmax=z.max())]

# the different cases I tried:
for norm in norms:
print(f"Trying: {type(norm)}")
fig, ax = plt.subplots(constrained_layout=True)
try:
lc = LineCollection(segments, cmap='viridis', norm=norm)

lc.set_array(z)
lc.set_linewidth(10)
line = ax.add_collection(lc)
fig.colorbar(line, ax=ax)

ax.plot(x, y)
fig.show()
except TypeError as e:
print(e)
plt.clf()

# and finally the part that causes the issue:
norm = LogNorm(vmin=z.min(), vmax=z.max())
fig, ax = plt.subplots(constrained_layout=True)
lc = LineCollection(segments, cmap='viridis', norm=norm)

lc.set_array(z)
lc.set_linewidth(10)
line = ax.add_collection(lc)
fig.colorbar(line, ax=ax)

ax.plot(x, y)
fig.show()

Actual outcome

see the error being raised above

Expected outcome

Using a np.array instead of a pd.Sequence

import numpy as np
import pandas as pd
from matplotlib.colors import LogNorm, Normalize
from matplotlib.collections import LineCollection
import matplotlib.pyplot as plt
x=np.arange(1, 11)
y=np.arange(1, 11)
### now z is set as an np.array
z=np.logspace(-5.0, 9, num=10)

points = np.array([x, y]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)

norm = LogNorm(vmin=z.min(), vmax=z.max())

fig, ax = plt.subplots(constrained_layout=True)
lc = LineCollection(segments, cmap='viridis', norm=norm)

lc.set_array(z)
lc.set_linewidth(10)
line = ax.add_collection(lc)
fig.colorbar(line, ax=ax)

ax.plot(x, y)
fig.show()

Matplotlib version

Operating system: Win 10

Matplotlib version: 3.4.1

Matplotlib backend: module://backend_interagg

Python version: 3.8

Other libraries: pandas

Issue 2:
Bug report

Bug summary

It seems matplotlib.colors.Normalize can work with pandas.Series inputs, whereas LogNorm can't.

Code for reproduction

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.collections import LineCollection
from matplotlib.colors import ListedColormap, BoundaryNorm, Normalize, LogNorm
import pandas as pd

x = np.linspace(0, 3 * np.pi, 500)
y = np.sin(x)
dydx = np.linspace(0, 3 * np.pi, 500) +1 # first derivative
df= pd.DataFrame({'x':x,'y':y,'dydx':dydx})
points = np.array([df['x'], df['y']]).T.reshape(-1, 1, 2)
segments = np.concatenate([points[:-1], points[1:]], axis=1)
fig, axs = plt.subplots()

# Create a continuous norm to map from data points to colors
norm = LogNorm(df['dydx'].min(), df['dydx'].max())
lc = LineCollection(segments, cmap='viridis', norm=norm)
# Set the values used for colormapping
lc.set_array(df['dydx'])
lc.set_linewidth(2)
line = axs.add_collection(lc)
fig.colorbar(line, ax=axs)
axs.set_xlim(x.min(), x.max())
axs.set_ylim(-1.1, 1.1)
plt.show()

Actual outcome

TypeError: '<=' not supported between instances of 'SingleBlockManager' and 'int'

Expected outcome

Not sure about what's expected, but if I do Normalize instead of LogNorm it works, if I do lc.set_array(df['dydx'].to_numpy()) instead of lc.set_array(df['dydx']) it also works. It's the combination of LogNorm and pd.Series is the problem.

Matplotlib version

version 3.1.1

module://ipykernel.pylab.backend_inline