Ich möchte RGB- oder HSV-Farben von Grün nach Blau interpolieren. Ich möchte jedoch, dass der Mittelwert des Gaußschen Grüns grün ist, so dass der Großteil des Satzes von grünlichen Farben dominiert wird. Am Ende möchte ich erreichen, dass wenn Sie von grün nach blau oder rot interpolieren, Sie von der Menge abweichen. So etwas wie dies, aber die Mehrheit sollte grün sein ..Python, wie man einen normalverteilten Satz von RGB-Farben erzeugt
Antwort
Dies kann mit dem HS erreicht werden V Farbraum, für den reines Grün bei H = 120 Grad ist. Sie können eine bivariate Normalverteilung in HV Raum von num
Punkte schaffen eine mean
und verteilt entsprechend der Kovarianzmatrix cov
zentriert:
import numpy as np
num = 1000
mean = [120,0.5] # [hue,value]
cov = [[20,0],[0,0.01]]
hv = np.random.multivariate_normal(mean,cov,num)
Als nächstes Modulo wir die Matrix, so dass Punkte über die Grenzen geschleift werden zurück in:
hv[:,0] %= 360
hv[:,1] %= 1
Als nächstes leihen wir von here eine RGB-Karte in HS Raum zu schaffen (V = 1):
from matplotlib.colors import hsv_to_rgb
import matplotlib.pyplot as plt
V, H = np.mgrid[0:1:100j, 0:1:300j]
S = np.ones_like(V)
HSV = np.dstack((H,S,V))
RGB = hsv_to_rgb(HSV)
plt.imshow(RGB, origin="lower", extent=[0, 360, 0, 1], aspect=150)
Schließlich überlagert unsere Verteilung auf H-S Raum:
plt.scatter(hv[:,0],hv[:,1])
plt.show()
Sie können mit cov
rumspielen, um die gewünschten Verteilung zu erreichen. Zum Beispiel gibt cov = [[80,0.7],[0.1,0.006]]
uns
Auch können Sie leicht dieses Beispiel auf drei Dimensionen erweitern, um Änderungen in der Sättigung zu berücksichtigen.
Eine Option ist die folgende.
Sie würden zuerst eine Colormap benötigen, die in ihrer Mitte grün hat. Wenn keiner der verfügbaren standard colormaps für Sie arbeitet, können Sie Ihre eigene Colormap erstellen. Im einfachsten Fall wäre es besteht aus drei Farben (blau, grün, rot)
colors = ["blue", "green", "red"]
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("name", colors)
Sie dann eine Normalisierung Instanz mit seinem Zentrum in der Mitte der Normalverteilung verwendet werden können. Hier wählen wir, dass es bei 0 ist; daher müssen die Normierungsgrenzen symmetrisch um Null sein.
norm = matplotlib.colors.Normalize(vmin=-3, vmax=3)
nun eine normalverteilte Variable mit x
Sie vom colormap als
sample = cmap(norm(x))
Um dies zu plotten abtasten kann, ein komplettes Beispiel unten finden:
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
n = 600
x = np.random.normal(size=n)
y = np.random.rand(n)
colors = ["blue", "green", "red"]
cmap = matplotlib.colors.LinearSegmentedColormap.from_list("name", colors)
norm = matplotlib.colors.Normalize(vmin=-3, vmax=3)
fig, (ax, ax2) = plt.subplots(nrows=2, figsize=(6,3),
gridspec_kw={"height_ratios":[1,3]}, sharex=True)
ax.axis("off")
ax.hist(x, bins=21, edgecolor="k")
sc = ax2.scatter(x,y,s=15, c=x, cmap=cmap, norm=norm)
fig.colorbar(sc, ax=ax2)
cax = fig.colorbar(sc, ax=ax)
cax.ax.set_visible(False)
plt.show()
Was bedeutet die y-Achse? – Crispin
Die y-Achse wird nur verwendet, um die Punkte im Raum zu strecken. Wenn sie alle auf einer Linie wären, könnten Sie sie nicht mehr unterscheiden. Die relevante Dimension ist die x-Dimension, die entsprechend der Farbkarte in Raum und Farbe codiert ist. – ImportanceOfBeingErnest
- 1. Wie erstellt man einen Satz von Listenelementen in Python?
- 2. einen Satz in Python Komprimieren
- 3. Generierung von normalverteilten Zufallsvektor mit Kovarianzmatrix
- 4. Wie man einen Satz Wörterbücher bildet
- 5. Wie man einen französischen Satz POS_TAG?
- 6. Python: Wie man eine zufällige Telefonnummer erzeugt?
- 7. Wie erzeugt man einen Barcode für Produkte?
- 8. Wie man einen Integritätshash für Verbindungselemente erzeugt
- 9. Wie man einen Satz von Klassen zu OMNet ++ hinzufügt?
- 10. Wie man Daten von Normalverteilung erzeugt
- 11. einen Satz von Daten
- 12. Unterschiedlicher Satz von Dateien, die von angular cli erzeugt werden
- 13. C++ Wie man den Satz des kartesischen Produkts von n-dimensionalen Tupeln erzeugt
- 14. Wie man einen neuen Funktionsnamen von einem anderen erzeugt
- 15. Haskell: Wie man einen Typ von zwei Typklassen erzeugt?
- 16. Wie erzeugt man einen 2D Schnitt durch ein 3D Bild?
- 17. Anfügen Werte auf einen Satz in Python
- 18. Wie man einen kombinierten Satz von Feldern in Mongodb in Python einzigartig macht
- 19. Wie man Methodensignatur erzeugt?
- 20. Wie alphanumerischen Satz in Python
- 21. Wie ein Satz in Python leeren
- 22. Erstelle einen Satz von den ursprünglichen Positionen auf Python
- 23. Wie man Kalender von einfachem Kalenderedel erzeugt
- 24. Wie man Permutationen erzeugt?
- 25. Python 3 - Wie man Buchstaben aus einem Satz fortlaufend entfernt?
- 26. Wie klonen oder kopieren Sie einen Satz in Python?
- 27. Wie erstelle ich einen Python-Satz mit nur einem Element?
- 28. Wie man Javadoc von der Befehlszeile erzeugt
- 29. Wie man Codebeispiele von einer Grammatik erzeugt?
- 30. Wie man eine Gitarrennote erzeugt
Ich bin mir nicht sicher, was Sie fragen, aber wenn Sie Daten plotten sind, lesen Sie die Gründe hinter den neuen Standard-Colormaps in Matplotlib http://matplotlib.org/users/dflt_style_changes.html –
Ich brauche Datenabtastwerte in RGB oder einem anderen Farbformat, die zu der oben beschriebenen Verteilung passen. –
Hat die 'cmap = cm.jet'' Farbleiste nicht ihren grünen Mittelwert?Also '' cmap (val) '' wo val ist Ihre Stichprobe von Gauss-Verteilung gezeichnet sollte zurückgeben, was Sie wollen. – alexblae