Próbuję użyć Pythona do stworzenia rozproszeniawykres zawierający dwie kategorie X „cat1” „cat2”, a każda kategoria ma wiele wartości Y. Mogę to uruchomić, jeśli liczba wartości Y dla każdej wartości X jest taka sama, używając następującego kodu:
import numpy as np
import matplotlib.pyplot as plt
y = [(1,1,2,3),(1,1,2,4)]
x = [1,2]
py.plot(x,y)
plot.show()
ale gdy tylko liczba Y dla każdej wartości X nie jest taka sama, pojawia się błąd. Na przykład to nie działa:
import numpy as np
import matplotlib.pyplot as plt
y = [(1,1,2,3,9),(1,1,2,4)]
x = [1,2]
plt.plot(x,y)
plot.show()
#note now there are five values for x=1 and only four for x=2. error
Jak mogę wykreślić różne liczby wartości Y dlakażda wartość X i jak mogę zmienić oś X z liczb 1 i 2 na kategorie tekstu „cat1” i „cat2”. Byłbym bardzo wdzięczny za każdą pomoc w tym zakresie!
Oto przykładowy obraz typu fabuły, którą próbuję zrobić:
http://s12.postimg.org/fa417oqt9/pic.png
Odpowiedzi:
15 dla odpowiedzi № 1Jak mogę wykreślić różne liczby wartości Y dla każdej wartości X
Wystarczy wykreślić każdą grupę osobno:
for xe, ye in zip(x, y):
plt.scatter([xe] * len(ye), ye)
i jak mogę zmienić oś X z liczb 1 i 2 na kategorie tekstu „cat1” i „cat2”.
Ustaw znaczniki i zaznacz etykiety ręcznie:
plt.xticks([1, 2])
plt.axes().set_xticklabels(["cat1", "cat2"])
Pełny kod:
import matplotlib.pyplot as plt
import numpy as np
y = [(1,1,2,3,9),(1,1,2,4)]
x = [1,2]
for xe, ye in zip(x, y):
plt.scatter([xe] * len(ye), ye)
plt.xticks([1, 2])
plt.axes().set_xticklabels(["cat1", "cat2"])
plt.savefig("t.png")