Frage zum Scatterplot mit Matplotlib
Verfasst: Mittwoch 2. März 2011, 16:29
Hallo,
ich muss ein Scatterplot mit matplotlib machen. Auf die x-Achse sollen Linknamen (WLAN-Verbindungen) und die y-Achse beschreibt die mittlere Qualität des Links in Prozent.
Ich arbeite seit erst einem Tag mit matplotlib, also ist mein Code nicht gerade optimiert oder gut. Aber etwas stört mich: Die Linknamen auf der x-Achse sind bei mir alle so verdichtet und an den Seiten ist so ein riesiger Freiraum bis zum Ende des Diagramms. Kann man das nicht ändern? So kann man nämlich bei vielen x-Werten die Namen gar nicht mehr richtig lesen...
ich muss ein Scatterplot mit matplotlib machen. Auf die x-Achse sollen Linknamen (WLAN-Verbindungen) und die y-Achse beschreibt die mittlere Qualität des Links in Prozent.
Code: Alles auswählen
#!/usr/bin/python -t
# -*- coding: utf-8 -*-
import pylab
import matplotlib
import matplotlib.pyplot as pyplot
def plot():
# get high quality links
links = [(('t9-149', 't9-146'), 80.826086956521735), (('t9-k60a', 't9-k61'), 85.411764705882348), (('t9-169', 't9-137'), 80.82352941176471), (('t9-k60b', 't9-k60a'), 81.5), (('t9-k60b', 't9-k61'), 84.952380952380949), (('a6-009', 'a6-108a'), 80.454545454545453), (('a6-009', 'a6-008'), 82.904761904761898), (('t9-146', 't9-149'), 82.125), (('t9-113', 't9-111'), 82.0), (('a6-107', 'a6-108a'), 81.80952380952381), (('a6-107', 'a6-008'), 82.700000000000003), (('a6-213', 'a6-212a'), 81.829268292682926), (('a6-213', 'a6-215'), 82.581395348837205), (('t9-009', 't9-111'), 80.200000000000003), (('t9-k61', 't9-k60a'), 80.722222222222229), (('t9-k61', 't9-k60b'), 82.38095238095238), (('a6-212a', 'a6-213'), 83.875), (('a6-212a', 'a6-215'), 82.195121951219505), (('a6-215', 'a6-213'), 82.232558139534888), (('a6-215', 'a6-212a'), 81.853658536585371), (('a6-108a', 'a6-009'), 80.795454545454547), (('a6-108a', 'a6-107'), 81.595238095238102), (('a6-108a', 'a6-008'), 81.428571428571431), (('a6-108a', 'a6-108b'), 80.659090909090907), (('a6-008', 'a6-107'), 80.536585365853654), (('a6-008', 'a6-108b'), 81.38095238095238), (('a6-108b', 'a6-008'), 80.666666666666671), (('a6-015', 'a6-017'), 80.631578947368425), (('a6-017', 'a6-015'), 80.65789473684211), (('a6-207', 'a6-205'), 82.357142857142861), (('a6-207', 'a6-208'), 84.261904761904759), (('a6-010', 'a6-011'), 82.595238095238102), (('a6-010', 'a3-106'), 80.047619047619051), (('a6-011', 'a6-010'), 82.428571428571431), (('a6-026a', 'a6-016'), 80.04651162790698), (('a6-026a', 'a6-026b'), 81.522727272727266), (('a6-026a', 'a6-028'), 80.523809523809518), (('a6-026a', 'a6-127'), 83.095238095238102), (('a6-026b', 'a6-016'), 80.11904761904762), (('a6-026b', 'a6-026a'), 85.285714285714292), (('a6-026b', 'a6-028'), 82.285714285714292), (('a6-026b', 'a6-127'), 84.285714285714292), (('a6-028', 'a6-026b'), 82.023809523809518), (('a6-127', 'a6-026b'), 80.5), (('a6-115', 'a6-016'), 80.238095238095241), (('a6-205', 'a6-207'), 80.534883720930239), (('a6-208', 'a6-207'), 80.75), (('a3-020a', 'a3-025'), 80.741935483870961), (('a3-023', 'a3-024'), 80.189189189189193), (('a3-106', 'a3-206'), 81.325581395348834), (('a3-206', 'a3-106'), 81.372093023255815), (('a3-206', 'a3-210'), 80.860465116279073), (('a3-210', 'a3-206'), 80.860465116279073), (('a3-024', 'a3-023'), 80.86486486486487)]
# prepare link information for plot
linklist = list()
sum = 0
for link, quality in links:
a = link[0]
b = link[1]
tmp = a + "--" + b
linklist.append(tmp)
sum += quality
avg_quality = sum / len(links)
# configure x axis
x = pylab.arange(0, len(links), 1)
xscal = list()
for i in range(1, len(links) + 1, 1):
xscal.append(i)
pylab.xlabel("Links")
# configure y axis
y = pylab.arange(1, 100 + 1, 5)
yscal = list()
for i in range(0, 100 + 1, 5):
yscal.append(i)
pylab.ylabel("Mittlere Qualitaet")
# plot
y_array = list()
for link, quality in links:
y_array.append(int(quality))
pyplot.scatter(x, pylab.array(y_array), s=10, marker = "o")
pylab.xticks(x, linklist, rotation=90)
pylab.yticks(yscal)
pylab.axhline(avg_quality)
pylab.show()
if __name__ == "__main__":
plot()