Tôi muốn tạo một lô với các điểm đánh dấu khác nhau và các màu khác nhau theo giá trị của 2 vectơ bên ngoài.âm mưu phân tán matplotlib với các điểm đánh dấu và màu sắc khác nhau
Dưới đây là những gì tôi đã cố gắng:
>>> s = [u'+', u'+', u'o']
>>> col = ['r','r','g']
>>> x = np.array([1,2,3])
>>> y = np.array([4,5,6])
>>> pl.scatter(x,y,marker=s,c=col)
Traceback (most recent call last):
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 233, in set_marker
Path(marker)
File "/usr/lib/python3/dist-packages/matplotlib/path.py", line 133, in __init__
vertices = np.asarray(vertices, np.float_)
File "/usr/lib/python3/dist-packages/numpy/core/numeric.py", line 460, in asarray
return array(a, dtype, copy=False, order=order)
ValueError: could not convert string to float: '+'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 3087, in scatter
linewidths=linewidths, verts=verts, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axes.py", line 6298, in scatter
marker_obj = mmarkers.MarkerStyle(marker)
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 162, in __init__
self.set_marker(marker)
File "/usr/lib/python3/dist-packages/matplotlib/markers.py", line 236, in set_marker
raise ValueError('Unrecognized marker style {}'.format(marker))
ValueError: Unrecognized marker style ['+', '+', 'o']
>>>
EDIT: đề xuất việc giải pháp trên ví dụ mô phỏng nhưng nó không hoạt động trên vấn đề thực sự của tôi. (Tôi không biết tại sao).
Đây mã đầy đủ của tôi:
import matplotlib.pyplot as pl
import numpy as np
locY = np.linspace(0, 1, 50) #in the real data locX and locY are coordinate of the points
locX = np.linspace(0,1,50)
p = 50
C = {0: [0, 13, 14, 19, 22, 30], 16: [1, 16, 17], 20: [15, 18, 20, 24], 37: [4, 8, 9, 33, 37, 40, 47], 41: [5, 7, 28, 32, 34, 36, 39, 41, 42, 44, 46], 26: [6, 26, 27, 29, 31, 35], 45: [10, 11, 12, 38, 43, 45, 48, 49], 21: [2, 3, 21, 23, 25]}
index = C.keys()
def plot_cluster(C, index):
color_map = ['b', 'g', 'r', 'c', 'm', 'y', 'k', 'w']
colors = []
m_type = []
for i in range(p):
for pos, k in enumerate(index):
if i in C[k]:
#colors.append(pos)
colors.append(color_map[pos])
if i == k:
m_type.append(u'+')
else:
m_type.append(u'o')
fig = pl.scatter(locX, locY, c=colors, s=30, cmap='spectral')
fig = pl.locator_params(nbins=3)
fig = pl.xlim(-0.2, 1.2)
fig = pl.ylim(-0.2, 1.2)
fig = pl.locator_params(nbins=5, axis='y')
return fig
pl.show(plot_cluster(C, index))
Nếu tôi thay thế một phần âm mưu với câu trả lời đề nghị tôi có được chỉ có 2 điểm trong cốt truyện (Tôi không biết tại sao)
Làm thế nào tôi có thể giải quyết?
Tác phẩm này trên ví dụ được mô phỏng nhưng không có trong mã thực. Tôi đã cập nhật câu hỏi – Donbeo
Nếu tôi cố chạy mã đó, tôi nhận được thông báo "đối tượng AttributeError: 'module' không có thuộc tính 'show'" tức là một vấn đề với dòng cuối cùng. Bạn có thể kiểm tra lại nó –
nó hoạt động cho tôi. Hãy cẩn thận với thụt đầu dòng và sử dụng nhập khẩu matplotlib.pyplot là pl và nhập numpy là np tại đầu – Donbeo