MatplotLib uniforme Farben

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
SuchtyTV
User
Beiträge: 4
Registriert: Samstag 6. Juli 2019, 12:11

Hey wenn ich dieses Skript ausführe:

Code: Alles auswählen

'''
==============
3D scatterplot
==============

Demonstration of a basic scatterplot in 3D.
'''

# This import registers the 3D projection, but is otherwise unused.
from mpl_toolkits.mplot3d import Axes3D  # noqa: F401 unused import

import matplotlib.pyplot as plt
import numpy as np

# Fixing random state for reproducibility


def randrange(n, vmin, vmax):
    '''
    Helper function to make an array of random numbers having shape (n, )
    with each number distributed Uniform(vmin, vmax).
    '''
    return (vmax - vmin)*np.random.rand(n) + vmin

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

n = 100

# For each set of style and range settings, plot n random points in the box
# defined by x in [23, 32], y in [0, 100], z in [zlow, zhigh].
for m, zlow, zhigh in [('o', -50, -25), ('^', -30, -5)]:
    xs = randrange(n, 23, 32)
    ys = randrange(n, 0, 100)
    zs = randrange(n, zlow, zhigh)
    ax.scatter(xs, ys, zs, marker=m)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()
Erhalte ich uniforme Farben.
Wenn ich dieses ausführe (autogeneriert):

Code: Alles auswählen

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
points =  [
(1.2,5,6),
(1.2,7,6),
(1.2,5,6),
(1.2,8,6),
(7,8,5),
(5,7,6),
(1,2,3),
(4,5,6),
(2,1,1),
]
rectangle =  [
((1,1,1),(2,2,2),(1,3,4)),
((2,3,4),(9,9,9),(3,4,5)),
]
for val in points:
  (x,y,z) = val
  ax.scatter(x, y, z, marker='o')
plt.show()
nicht. Was muss ich tuen, damit ich uniforme Farben erhalte? Was ist in dem obigen Skript anders?

Vielen Danl :lol:
Benutzeravatar
__blackjack__
User
Beiträge: 13925
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SuchtyTV: Für jeden Aufruf von `scatter()` sucht sich `matplotlib` eine neue Farbe aus. Im ersten Skript wird `scatter()` zweimal aufgerufen, im zweiten wird es 9× aufgerufen, für jeden Punkt einmal. Also erstelle Listen mit allen Werten für `x`, `y`, und `z` und rufe `scatter()` damit dann *ein*mal auf. Und schon haben alle Punkte die gleiche Farbe.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
SuchtyTV
User
Beiträge: 4
Registriert: Samstag 6. Juli 2019, 12:11

Wie ich Python als funktionale Programmier- und dynamische Typsprache hasse -.- Eine Liste darf auch in die Funktion...
Vielen Dank für deine Antwort :)
Benutzeravatar
__blackjack__
User
Beiträge: 13925
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SuchtyTV: Das ist jetzt aber nichts was man nicht auch in einer statisch typisierten Programmiersprache hinbekommen würde in dem man die Methode/Funktion überlädt. Wobei meine Reaktion eher umgekehrt ist: Ich bin mehr verwundert darüber das man auch Einzelwerte angeben kann, denn normal sind für mich an der Stelle Sequenzen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
SuchtyTV
User
Beiträge: 4
Registriert: Samstag 6. Juli 2019, 12:11

Ja schon, aber bei statisch typisierten Sprachen gibt es dafür scheinbar besser dokumentierte Wikis... Wenn ich Pythonwikis lese, versteh ich immer nur Bahnhof... :lol: Liegt wohl an mir.
Benutzeravatar
__blackjack__
User
Beiträge: 13925
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@SuchtyTV: Was für Wikis? Ich würde ja in die Dokumentation schauen von dem was man da benutzt. Die Argumente heissen `xs`, `ys`, und `zs` was auch auf Sequenzen hindeutet, und dann hast Du da das erste Beispiel in dem sehr eindeutig Arrays für jedes der drei Argumente übergeben werden.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
Antworten