擅长:python、mysql、java
<p>由于代码不完整,很难说清楚,但是标记的顺序似乎被<code>cycle</code>迭代器弄乱了。你为什么不试试:</p>
<pre><code>markerTypes = ['o', 's', '^']
strainLegends = []
for strain, markerType in zip(strains, markerTypes):
strainSamples = [sample for sample in samples if sample.split('_')[0] == strain]
xData = pca2Plot.loc[strainSamples, 'PC1']
yData = pca2Plot.loc[strainSamples, 'PC2']
ax.scatter(xData, yData, c=drawColors[strainSamples], s=40, marker=markerType, zorder=3)
strainLegends.append(Line2D([0], [0], marker=markerType, color='k',
markersize=10,
linewidth=0, label=strain))
ax.legend(handles=strainLegends)
</code></pre>
<p>当然,这假设<code>strains</code>和<code>markerTypes</code>的长度相同,并且标记在列表中的位置与要分配它们的应变值相同</p>