Ausgabe
Also versuche ich, ein paar Plots zu machen und habe versucht, den Cmap “Jet” zu verwenden. Es erschien immer wieder als Viridis, also habe ich mich in SE umgesehen und einige sehr einfache Plots ausprobiert:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(0, 100)
y = x
t = x
df = pd.DataFrame([x,y]).T
df.plot(kind="scatter", x=0, y=1, c=t, cmap="jet")
x = np.arange(0, 100.1)
y = x
t = x
df = pd.DataFrame([x,y]).T
df.plot(kind="scatter", x=0, y=1, c=t, cmap="jet")
Irgendwelche Gedanken darüber, was hier vor sich geht? Ich kann sagen, dass es etwas mit dem dtype der Felder im Datenrahmen zu tun hat (dypte=”float” zum ersten Codesatz hinzugefügt und das gleiche Ergebnis wie im zweiten Codesatz erhalten), sehe es aber nicht warum das so wäre.
Was ich natürlich wirklich möchte, ist eine Problemumgehung, wenn mit meinem Code nichts falsch ist.
Lösung
Es scheint tatsächlich mit Pandas (Scatter) Plot zusammenzuhängen und wie Sie darauf hingewiesen haben, Float zu dtype – einige weitere Details am Ende.
Eine Problemumgehung ist die Verwendung von matplotlib.
Der Plot sieht am Ende gleich aus, aber die cmap="jet"
Einstellung gilt auch für float dtype:
Code:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
x = np.arange(0, 100.1)
y = x
t = x
df = pd.DataFrame([x,y]).T
fig, ax = plt.subplots(1,1)
sc_plot = ax.scatter(df[0], df[1], c=t, cmap="jet")
fig.colorbar(sc_plot)
ax.set_ylabel('1')
ax.set_xlabel('0')
plt.show()
Oder die kürzere Version (etwas näher am kurzen df.plot-Aufruf) mit pyplot anstelle der objektorientierten Schnittstelle :
df = pd.DataFrame([x,y]).T
sc_plot = plt.scatter(df[0], df[1], c=t, cmap="jet")
plt.colorbar(sc_plot)
plt.ylabel('1')
plt.xlabel('0')
plt.show()
In Bezug auf die Hauptursache, warum Pandas df.plot
die cmap-Einstellung nicht befolgen:
Das nächste, was ich finden konnte, ist, dass Pandas Scatter Plot c
dauert
str, int oder arrayartig
(obwohl ich nicht sicher bin, warum t sich nicht auf den Index bezieht, der wieder int wäre).
Sogar df.plot(kind="scatter", x=0, y=1, c=df.index.values.tolist(), cmap='jet')
greift auf viridis zurück, während df.index.values.tolist()
eindeutig nur int.
Was noch seltsamer ist, da pandasdf.plot
standardmäßig auch matplotlib verwendet:
Verwendet das durch die Option plotting.backend angegebene Backend. Standardmäßig wird matplotlib verwendet.
Beantwortet von – MagnusO_O
Antwort geprüft von – Candace Johnson (FixError Volunteer)