2016-04-16 13 views
0

Ich habe eine Datendatei mit 3 Spalten. Die ersten 2 Spalten repräsentieren Koordinaten, der dritte ist ein String-Wert wie 'foo', 'bar' oder 'ter'.Wie ändert man Marker und Farbe in Matplotlib für einen bestimmten Spaltenwert?

Ich möchte mit Pythons Matplotlib basierend auf diesem Etikett, verschiedene Marker und Farbe anzeigen. Beispiel:

  • foo => roter Kreis
  • bar => grünes Dreieck
  • ter => schwarzes Quadrat

Was habe ich bis jetzt ist:

import numpy as np 
import matplotlib.pyplot as plt 

coordData = np.genfromtxt("mydata.csv", usecols=(0,1), delimiter=",", dtype=None) 
coordLabels = np.genfromtxt("mydata.csv", usecols=2, delimiter=",", dtype=None) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.scatter(coordData[:, 0], coordData[:, 1], c="r", marker="o") 
plt.show() 

Wie kann ich Marker und Farbe basierend auf den Werten coordLabels wechseln?

SOLUTION

auf Anregung Basierend habe ich einige Änderungen:

coordData = np.genfromtxt("mydata.csv", usecols=(0, 1), delimiter=",", dtype=None) 
coordLabels = np.genfromtxt("mydata.csv", usecols=2, delimiter=",", dtype=None) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

uniqueVals = np.unique(coordLabels) 

markers = ['^', 'o', '*'] 
colors = { '^' : 'r', 
      'o' : 'b', 
      '*' : 'g'} 

for marker, val in zip(markers, uniqueVals): 
    toUse = coordLabels == val 
    ax.scatter(coordData[toUse,0], coordData[toUse,1], c = colors[marker], marker=marker) 

plt.show() 

Antwort

1

Wenn Sie die Farbe wünschen in coordLabels auf dem Etikett abhängig zu sein, möchten Sie die Farbe einzustellen gleich dass Variable statt 'r' wie Sie haben.

ax.scatter(coordData[:, 0], coordData[:, 1], c=coordLabels, marker="o") 

Wenn Sie verschiedene Marker wollen für jede der Parzellen, müssen Sie mehrere Streudiagramme (eine für jeden Wert in coordLabels

uniqueVals = ['foo', 'bar', 'ter'] 

# Create your own list of markers here (needs to be the same size as `uniqueVals`) 
markers = ['o', '^', 's'] 
colors = ['r', 'g', 'b'] 

for color, marker, val in zip(colors, markers, uniqueVals): 
    toUse = coordLabels == val 
    ax.scatter(coordData[toUse,0], coordData[toUse,1], c=color, marker=marker) 
+0

Mit einigen Änderungen, die ich Ihren Vorschlag angepasst erstellen. Vielen Dank. – Randomize

Verwandte Themen