You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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
importnumpyasnpimportpandasaspdfrommatplotlib.colorsimportLogNorm, Normalizefrommatplotlib.collectionsimportLineCollectionimportmatplotlib.pyplotaspltx=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: fornorminnorms:
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()
exceptTypeErrorase:
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
importnumpyasnpimportpandasaspdfrommatplotlib.colorsimportLogNorm, Normalizefrommatplotlib.collectionsimportLineCollectionimportmatplotlib.pyplotaspltx=np.arange(1, 11)
y=np.arange(1, 11)
### now z is set as an np.arrayz=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
The text was updated successfully, but these errors were encountered:
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
Actual outcome
see the error being raised above
Expected outcome
Using a np.array instead of a pd.Sequence
Matplotlib version
The text was updated successfully, but these errors were encountered: